【问题标题】:"ValueError too many values to unpack" when using str.split in a for loop在 for 循环中使用 str.split 时出现“ValueError 太多值无法解包”
【发布时间】:2018-10-07 19:17:03
【问题描述】:

我在原因很明显之前就遇到了这个错误,但是我在下面的这个 sn-p 上遇到了问题。

#!/usr/bin/python

ACL = 'group:troubleshooters:r,user:auto:rx,user:nrpe:r'

for e in ACL.split(','):
  print 'e = "%s"' % e
  print 'type during split = %s' % type(e.split(':'))
  print 'value during split:  %s' % e.split(':')
  print 'number of elements:  %d' % len(e.split(':'))
  for (one, two, three) in e.split(':'):
      print 'one = "%s", two = "%s"' % (one, two)

我已经添加了这些打印语句以进行调试,并确认拆分正在生成一个 3 元素列表,但是当我尝试将其放入 3 个变量中时,我得到:

e = "group:troubleshooters:r"
type during split = <type 'list'>
value during split:  ['group', 'troubleshooters', 'r']
number of elements:  3
Traceback (most recent call last):
  File "/tmp/python_split_test.py", line 10, in <module>
for (one, two, three) in e.split(':'):
ValueError: too many values to unpack

我错过了什么?

【问题讨论】:

标签: python split valueerror iterable-unpacking


【解决方案1】:

也许你应该:

one, two, three = e.split(":")

因为e.split(":") 已经是具有三个值的可迭代对象。

如果你写

for (one, two, three) in something

那么something 必须是三个值的可迭代对象,例如[[1, 2, 3], [4, 5, 6]],但不是[1, 2, 3]

【讨论】:

    【解决方案2】:
    for (one, two, three) in e.split(':'):
    

    需要e.split() 来返回一个可迭代的列表(例如一个二维列表)。 for 将遍历列表,并在该迭代期间将嵌套列表的每个元素分配给对应的变量。

    但是e.split() 只返回一个字符串列表。您不需要迭代,只需分配它们:

    one, two, three = e.split(':')
    

    【讨论】:

      【解决方案3】:

      你可以用这个:

      one, two, three = e.split(':')
      print 'one = "%s", two = "%s"' % (one, two)
      

      【讨论】:

        猜你喜欢
        • 2021-01-16
        • 2018-04-06
        • 2017-09-03
        • 2019-03-28
        • 1970-01-01
        • 2020-03-05
        • 2021-11-04
        • 2017-04-30
        • 2018-10-18
        相关资源
        最近更新 更多