这个问题困扰了很多人,我也曾经在网上寻找过答案,但最终觉得所谓的解答都不理想。原因在于所有的解答都是从自身的问题出发,没有触及到问题的实质。
这个问题其实很简单,就是你的返回值或者赋值语句与返回值或者赋值等式右边的值数目不匹配。
比如:
In [1]: x,y,z = (1,'美女',[3,'b'])
In [2]: x
Out[2]: 1
In [3]: y
Out[3]: '美女'
In [4]: z
Out[4]: [3, 'b']
In [5]: x,y,z,w = (1,'美女',[3,'b'])
这里赋值就是对的。
但如果改成下面这样,就会报错:
x,y,z,w = (1,'美女',[3,'b'])
左边比右边元组tuple中的元素多了一个。
相应的,Python提供了一种返回值的机制,即一个函数可以返回多个值。这在别的语言中是很少见的。这既提供了很大的灵活性,但也带来了一些麻烦。麻烦之一就是too many values to unpack。
原因跟上面一样,赋值语句左边的元素和函数返回值个数不匹配。
def func():
.......
return x,y,z
a,b,c,d = func()
这里确定会出错,因为func返回值只有三个,但你有四个接收者