0

Using split in a for loop results in the mentioned exception. But when taking the elements indpendent from a for loop it works:

>>> 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'

An explanation would be appreciated - and also naturally the proper syntax for the for loop version.

4

3 回答 3

7

循环期望迭代中的for每个项目都可以解压缩成两个变量。所以在你的情况下,它看起来像其中之一:

[('a, b'), ('c, d'), ...]
[['a, b'], ['c, d'], ...]
['ab', 'cd', ...]
...

每个可迭代项中的每个项目都可以拆分为一个k和一个v组件。在您的情况下,他们不能,因为输出x.split('=')是包含两个以上字符的字符串列表:

['abc', 'asflskfjla']
于 2013-05-18T02:38:04.053 回答
3

x.splity从变量中可以看出,返回字符串列表。当您对其进行迭代时,它会获取列表的第一个元素'abc'并尝试将其绑定到 tuple k, v。由于字符串是一种序列类型,它会尝试将字符串的字符分配给您要求的元组 - 实际上有太多的值(三个字母)无法解压缩成一个二元素元组。

于 2013-05-18T02:38:15.953 回答
0

如果您想要这种行为,只需包含s.split()在一个列表中:

>>> for (k,v) in [s.split("=")]:
    print(k,v)  
('abc', 'asflskfjla')
于 2013-05-18T03:06:14.377 回答