Python函数运行报too many values to unpack (expected 2)错误如何解决?
错误原因分析
原报错信息:in getavg for idx, Video in array: ValueError: too many values to unpack (expected 2)
- 核心错误来自
for idx, Video in array:这行逻辑:你传入的array是存储字典的普通列表,直接遍历列表时每次迭代只会返回1个字典元素,但你写了idx、Video两个变量接收返回值,Python尝试把单个字典拆分为2个值匹配变量数量失败,就会抛出该解包错误。 - 额外隐藏问题:代码末尾
print语句直接拼接字符串类型的number和数值类型的views_avg,跑完求和逻辑后也会触发类型错误。 - 可选优化提示:函数定义中用
array=[]作为可变默认参数,会存在多次调用时参数复用的隐患,建议调整为不可变默认值。
修复方案
你当前的代码逻辑中完全没有用到迭代索引idx,最简单的修改是直接去掉idx变量,同时修正字符串拼接和默认参数的问题,修复后可正常运行的代码如下:
Videos10k=[{'title': '', 'titleWords': ['...','...'], 'titleLength': 10, 'likes': 86, 'disLikes': 5, 'views': 2202, 'creator': '...', 'description': '...'}] # 调整可变默认参数写法,避免后续调用异常 def getavg(number, array=None): if array is None: array = [] views_avg = 0 # 不需要索引直接遍历元素即可 for Video in array: views = Video["views"] views_avg = views_avg + views views_avg = views_avg / len(array) # 用f-string格式化输出,无需手动转换数值类型 print(f"Average views for {number} {views_avg}") getavg("10k", Videos10k)
如果你后续需要用到迭代的索引值,只需要把遍历行修改为for idx, Video in enumerate(array):即可,enumerate()方法会自动返回(索引, 元素)的二元组,匹配你写的两个变量。
内容的提问来源于stack exchange,提问作者sanket kheni
相关产品推荐
相关产品推荐

