Python 比特币交易映射抛出密钥错误
我有下面一段代码,它似乎一直运行到第36行recipientlist.append(target[“addr”]),然后抛出错误KeyError:“addr” 然而,数据中似乎有“addr”,因此不确定问题出在哪里 有人能帮忙吗Python 比特币交易映射抛出密钥错误,python,python-3.x,bitcoin,Python,Python 3.x,Bitcoin,我有下面一段代码,它似乎一直运行到第36行recipientlist.append(target[“addr”]),然后抛出错误KeyError:“addr” 然而,数据中似乎有“addr”,因此不确定问题出在哪里 有人能帮忙吗 import json import requests z = 0 i = 0 firstpart = "https://blockchain.info/rawaddr/" initialinput = '3PaGEcGDjPsNQHAQ4pTmj
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)
导入json
导入请求
z=0
i=0
第一部分=”https://blockchain.info/rawaddr/"
initialinput='3PaGEcGDjPsNQHAQ4pTmjQuLXWoEwvnr11'
initialreq=第一部分+初始输入
firstjson=(requests.get(initialreq)).json()
graphvizlines=[]
地址列表=[]
usedaddresslist=[]
addresslist.append(初始输入)
usedaddresslist.append(初始输入)
而我<6:
如果z为1:
initialreq=第一部分+地址列表[i]
firstjson=(requests.get(initialreq)).json()
对于firstjson[“txs”]中的事务:
payerlist=[]
recipientlist=[]
打印(“\n”+事务[“哈希”])
对于事务处理[“输入”]中的项目:
payerlist.append(项目[“上一页”][“地址”])
如果项目[“上一个”][“地址”]不在地址列表中:
地址列表。追加(项目[“上一页”][“地址”])
对于交易记录[“输出”]中的目标:
recipientlist.append(目标[“addr”])
如果目标[“地址”]不在地址列表中:
addresslist.append(目标[“addr”])
对于付款人列表中的付款人:
对于收件人列表中的收件人:
a=““+”付款人+““+”->“+”“+”“+”接收人+“+”;”
如果a不在图形中:
graphvizlines.append(a)
i=i+1
z=1
对于图线中的t:
打印(t)
虽然addr
存在于数据中,但它并不存在于每个输入
元素中。检查txs
中的最后一个元素,您将看到输入
是:
"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\u out
addr
您需要首先检查addr
元素是否存在,或者将循环包装在try/except
中
firstjson['txs']中事务的:
...
对于事务处理['inputs']中的项目:
地址=item.get('prev_out')。get('addr'))
如果(地址==无):
持续
payerlist.append(地址)
...
如果
prev\u out
不存在,上述操作仍将失败,因此您应该确认将在结果中出现的内容以及可能出现的内容。当addr
在数据中时,它不在每个输入
元素中。检查txs
中的最后一个元素,您将看到输入
是:
"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\u out
addr
您需要首先检查addr
元素是否存在,或者将循环包装在try/except
中
firstjson['txs']中事务的:
...
对于事务处理['inputs']中的项目:
地址=item.get('prev_out')。get('addr'))
如果(地址==无):
持续
payerlist.append(地址)
...
如果prev\u out
不存在,上述操作仍将失败,因此您应该确认结果中的内容以及可能的内容