将拆分后的字符串转换为元组会导致“要拆包的值太多”

问题描述 投票:0回答:3

在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循环版本提供了正确的语法。

python string for-loop split iterable-unpacking
3个回答
6
投票
for循环期望可迭代项中的每一项都可以解包为两个变量。因此,在您的情况下,看起来像其中之一:

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

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

['abc', 'asflskfjla']


2
投票
x.split返回一个字符串列表,如从y变量中所见。当您对其进行迭代时,它将获取列表'abc'的第一个元素,并尝试将其绑定到元组k, v。由于字符串是序列类型,它会尝试将字符串的字符分配给您要的元组-实际上,值太多(三个字母),无法解压缩为两个元素的元组。

0
投票
如果您想要此行为,只需将s.split()包装在列表中:

>>> for (k,v) in [s.split("=")]: print(k,v) ('abc', 'asflskfjla')

© www.soinside.com 2019 - 2024. All rights reserved.