Python 代码错误解决:ValueError: not enough values to unpack (expected 5, got 2)

在 Python 代码中,如果使用 zip() 函数将两个迭代器进行组合,但迭代器返回的元素数量不一致,就会导致 ValueError: not enough values to unpack (expected 5, got 2) 错误。

错误原因

该错误提示表明,在 zip() 函数中,我们期望解包 5 个元素,但实际只获得了 2 个元素。

代码示例

def a():
    aa=[{'code': 'ECONOMY-SPECIAL-N', 'name': '特价经济舱'}, {'code': 'ECONOMY-PROMOTE-N', 'name': '促销经济舱'}, {'code': 'ECONOMY-ADV-DIS-N', 'name': '折扣高经舱'}]
    for li in aa:
        name=li['code']
        plan=li['name']
        # print(name,plan)
        yield name,plan
        
def b():
    bb=[{'a':1,'bb':11,'c':111},{'a':2,'bb':22,'c':222},{'a':3,'bb':33,'c':222}]

    for div in bb:
        prices = (div['a'], div['bb'], div['c'])
        yield prices
        
def c():
    for (name, plan), (price1, price2, price3) in zip(a(), b()):
        wb={
            'q':name,'w':plan,'e':price1,'r':price2,'t':price3
        }
        print(wb)

if __name__ == '__main__':
    c()

解决方法

b() 函数中使用 zip() 函数将三个价格打包成一个元组返回,然后在 zip() 函数中将 a()b() 的返回值一一对应解包,即可避免上述错误。

修改后的代码

def a():
    aa=[{'code': 'ECONOMY-SPECIAL-N', 'name': '特价经济舱'}, {'code': 'ECONOMY-PROMOTE-N', 'name': '促销经济舱'}, {'code': 'ECONOMY-ADV-DIS-N', 'name': '折扣高经舱'}]
    for li in aa:
        name=li['code']
        plan=li['name']
        yield name,plan
        
def b():
    bb=[{'a':1,'bb':11,'c':111},{'a':2,'bb':22,'c':222},{'a':3,'bb':33,'c':222}]
    for div in bb:
        prices = (div['a'], div['bb'], div['c'])
        yield prices
        
def c():
    for (name, plan), (price1, price2, price3) in zip(a(), b()):
        wb={
            'q':name,'w':plan,'e':price1,'r':price2,'t':price3
        }
        print(wb)

if __name__ == '__main__':
    c()

总结

通过在 b() 函数中使用 zip() 函数将多个元素打包成一个元组,并进行对应解包,可以解决 ValueError: not enough values to unpack 错误。


原文地址: https://www.cveoy.top/t/topic/mmyp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录