简体   繁体   English

比特币交易映射引发 KeyError

[英]Bitcoin Transaction Mapping Throws KeyError

I have the following piece of code, which seems to run until line 36 recipientlist.append(target["addr"]) and then throws the error KeyError: 'addr'我有以下代码,它似乎一直运行到第 36 行收件人列表.append(target["addr"]) 然后抛出错误 KeyError: 'addr'

However 'addr' seems to be in the data so not sure what the issue is但是“addr”似乎在数据中,所以不确定问题是什么

Can someone please help?有人可以帮忙吗?

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)

While addr is in your data, it's not in every inputs element.虽然addr在您的数据中,但它不在每个inputs元素中。 Check the very last element in txs , you'll see that inputs is:检查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": ""
    }
],

This element lacks the presence of prev_out .此元素缺少prev_out的存在。 addr . addr

You will need to first check if the addr element exists or wrap your loop in a try/except .您需要首先检查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)
        ...

The above would still fail if prev_out didn't exist, so you should confirm what will be in the result and what might be.如果prev_out不存在,上述操作仍然会失败,因此您应该确认结果中出现什么以及可能是什么。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM