为何解包3个函数返回值时出现ValueError: too many values to unpack (expected 2)
为什么解包错误提示是“too many values to unpack (expected 2)”?
先纠正你代码里的小笔误:定义的函数是fn,但调用时写的是fn5,不过这不是触发解包错误的原因,核心问题在于变量和返回值的数量不匹配。
错误提示的表述逻辑其实很直白:
- 当你写
[i,j] = fn(5,2)时,Python会把函数返回的(a,b,h)当成一个有3个元素的可迭代对象,它需要把这些值逐个分配给左侧的变量。 - 左侧只有2个变量,意味着Python预期能拿到2个值来完成分配,但实际收到了3个——所以报错说“值太多了,预期2个”。
你疑惑的“not enough values to unpack”是另一种场景:如果函数返回2个值,但你用3个变量去接收,比如[i,j,k] = fn_return_two(),这时候变量数量多于返回值数量,Python才会提示“值不够,预期3个”。
举两个对比例子更清楚:
- 正确解包:
def fn(x,y): a = x*5 b = a*y h = b - 3 return a,b,h # 用3个变量接收3个返回值,正常运行 i,j,k = fn(5,2)
- 变量多于返回值的场景(触发“not enough”错误):
# 用4个变量接收3个返回值,报错:ValueError: not enough values to unpack (expected 4, got 3) i,j,k,l = fn(5,2)
简单总结:错误提示里的“expected”指的是你提供的变量数量,而不是函数应该返回的数量。你给了2个变量,Python就预期能拿到2个值来分配,但实际拿到3个,所以说“too many values”。
内容的提问来源于stack exchange,提问作者user15502001
相关产品推荐
相关产品推荐

