ValueError:实施区块链时没有足够的值来解压(预期3,得到2)

问题描述 投票:1回答:1

我正在使用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 / ...

python python-3.x blockchain valueerror
1个回答
0
投票

txn.inputs返回2的值,而不是3。您尝试解压缩3个值,因为for循环具有for addr, amt, inx,而实际上txn.inputs不包括3个值

© www.soinside.com 2019 - 2024. All rights reserved.