You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 11:45:08