Python字典解包报错ValueError求助:too many values to unpack
解决字典解包的ValueError问题
首先,你的错误根源出在主脚本的赋值方式上,咱们一步步拆解问题:
错误原因
你在主脚本里写了:
[X] = MakeDictionary2(sheet)
这里的[X]是列表解包语法,Python会尝试把右侧可迭代对象的元素逐个分配给列表里的变量。但MakeDictionary(我猜你这里是笔误,实际应该调用的是MakeDictionary而非MakeDictionary2)返回的是一个字典,而字典默认的迭代对象是它的键集合——你的字典有300个键(因为sheet.max_row=301,range(1,301)会循环300次),Python试图把300个键塞进只有一个变量X的列表里,自然就抛出了ValueError: too many values to unpack (expected 1)。
修复方案
直接去掉列表括号,把函数返回的字典直接赋值给变量即可:
X = MakeDictionary(sheet) print(X)
这样就能正确接收函数返回的完整字典了。
额外代码优化建议
顺便给你提两个小细节优化,让代码更规范健壮:
- 在
MakeDictionary函数里,解包ColVal的返回值时,用元组解包比列表更符合Python常规写法:
(列表解包也能运行,但元组解包是更标准的写法)ColA, ColAVal = ColVal(RowName, x, sheet) - 注意
range(1, sheet.max_row)是左闭右开区间,会漏掉最后一行数据(比如sheet.max_row=301时,只会遍历1到300)。如果需要包含第301行,应该改成:for x in range(1, sheet.max_row + 1):
内容的提问来源于stack exchange,提问作者Warlord G-Productions
相关产品推荐
相关产品推荐

