在for循环中使用split会导致上述异常。但是,当从for循环中获取独立元素时,它可以工作:
>>> for k,v in x.split("="):
... print k,v
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> y = x.split("=")
>>> y
['abc', 'asflskfjla']
>>> k,v = y
>>> k
'abc'
>>> v
'asflskfjla'
一种解释将不胜感激-而且自然也为for循环版本提供了正确的语法。
for
循环期望可迭代项中的每一项都可以解包为两个变量。因此,在您的情况下,看起来像其中之一:[('a, b'), ('c, d'), ...]
[['a, b'], ['c, d'], ...]
['ab', 'cd', ...]
...
这些可迭代项中的每个项都可以分为k
和v
组件。在您的情况下,它们不能,因为x.split('=')
的输出是一个包含两个以上字符的字符串列表:
['abc', 'asflskfjla']
x.split
返回一个字符串列表,如从y
变量中所见。当您对其进行迭代时,它将获取列表'abc'
的第一个元素,并尝试将其绑定到元组k, v
。由于字符串是序列类型,它会尝试将字符串的字符分配给您要的元组-实际上,值太多(三个字母),无法解压缩为两个元素的元组。s.split()
包装在列表中:>>> for (k,v) in [s.split("=")]:
print(k,v)
('abc', 'asflskfjla')