Python 代码错误解决:ValueError: not enough values to unpack (expected 5, got 2)
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 著作权归作者所有。请勿转载和采集!