簡體   English   中英

比特幣交易映射引發 KeyError

[英]Bitcoin Transaction Mapping Throws KeyError

我有以下代碼,它似乎一直運行到第 36 行收件人列表.append(target["addr"]) 然后拋出錯誤 KeyError: 'addr'

但是“addr”似乎在數據中,所以不確定問題是什么

有人可以幫忙嗎?

import json
import requests

z = 0
i = 0
firstpart = "https://blockchain.info/rawaddr/"
initialinput = '3PaGEcGDjPsNQHAQ4pTmjQuLXWoEwvnr11'
initialreq = firstpart + initialinput

firstjson = (requests.get(initialreq)).json()
graphvizlines = []

addresslist = []
usedaddresslist = []

addresslist.append(initialinput)
usedaddresslist.append(initialinput)

while i < 6:
    if z is 1:
        initialreq = firstpart + addresslist[i]
        firstjson = (requests.get(initialreq)).json()
    
    for transaction in firstjson["txs"]:
        payerlist = []
        recipientlist = []
        
        print("\n" + transaction["hash"])

        for item in transaction["inputs"]:
            payerlist.append(item["prev_out"]["addr"])
            if item["prev_out"]["addr"] not in addresslist:
                addresslist.append(item["prev_out"]["addr"])

        for target in transaction["out"]:
            recipientlist.append(target["addr"])
            if target["addr"] not in addresslist:
                addresslist.append(target["addr"])

        for payer in payerlist:
            for recipient in recipientlist:
                a = '"' + payer + '"' + " -> " + '"' + recipient + '"' + ";"
                if a not in graphvizlines:
                    graphvizlines.append(a)
    i = i + 1    
    z = 1
        

for t in graphvizlines:
    print(t)

雖然addr在您的數據中,但它不在每個inputs元素中。 檢查txs中的最后一個元素,您會看到inputs是:

"inputs": [
    {
        "sequence": 0,
        "witness": "304402203f872bfd7093fcdad6a3735cbd76f276279890b0304e6f23f54c51388cc2a84402203731d7a7f71265f072f6792c8f4d2e805ff8f86bbfbd0b48a187d573c051593001",
        "prev_out": {
            "spent": true,
            "spending_outpoints": [
                {
                    "tx_index": 0,
                    "n": 0
                }
            ],
            "tx_index": 0,
            "type": 0,
            "value": 1880609,
            "n": 1,
            "script": "0014292738ed3f9466f8eedd8c49e5bb013088a7052b"
        },
        "script": ""
    }
],

此元素缺少prev_out的存在。 addr

您需要首先檢查addr元素是否存在或將循環包裝在try/except中。

for transaction in firstjson['txs']:
    ...
    for item in transaction['inputs']:
        address = item.get('prev_out').get('addr')
        if(address == None):
            continue
        payerlist.append(address)
        ...

如果prev_out不存在,上述操作仍然會失敗,因此您應該確認結果中出現什么以及可能是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM