我正在使用python 3.8.2实现区块链并在运行我的wallet.py时出现valueError。>
Traceback (most recent call last): File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module> start(fakepyfile,mainpyfile) File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start exec(open(mainpyfile).read(), __main__.__dict__) File "<string>", line 137, in <module> File "<string>", line 98, in get_balance File "/storage/emulated/0/Blockchain/transaction_block.py", line 159, in get_balance for addr, amt, inx in txn.inputs: ValueError: not enough values to unpack (expected 3, got 2)
我认为我理解该错误特别是在transaction_block模块的get_balance()函数和事务模块的add_input()方法中。
交易模块:
class txn: inputs = None outputs = None signatures = None required = None def __init__(self): self.inputs = [] self.outputs = [] self.signatures = [] self.required = [] def add_input(self, from_address, amount, index): self.inputs.append((from_address, amount, index)) def add_output(self, to_address, amount): self.outputs.append((to_address, amount))
transaction_block模块:
def get_balance (pu_key, last_block): this_block = last_block bal = 0.0 while this_block != None: for txn in this_block.data: for addr, amt, inx in txn.inputs: if addr == pu_key: bal = bal - amt for addr, amt in txn.outputs: if addr == pu_key: bal = bal + amt this_block = this_block.previous_block return bal
虽然我尝试在线搜索此错误并找到了一些解决方案(Python 3 - ValueError: not enough values to unpack (expected 3, got 2)),但它们对我完全没有用。因此,请任何人可以帮助我解决此问题吗?
P.S .:我是stackoverflow上的新手,所以如果您有任何建议可以改善我的问题,请务必给他们!另外,我不知道是否应将整个模块放在此问题中以理解,但是如果您需要的话,也可以随时提出要求!我没有添加它们以使问题变得更整洁。
我正在使用python 3.8.2实现区块链,并在运行我的wallet.py Traceback(最近一次调用为最新)时遇到valueError:File“ /data/user/0/ru.iiec.pydroid3/files/accomp_files / ...
txn.inputs
返回2的值,而不是3。您尝试解压缩3个值,因为for循环具有for addr, amt, inx
,而实际上txn.inputs
不包括3个值