Python ValueError слишком много значений для распаковки - не верно?

Я получил эту ошибку до того, где причина была очевидна, но у меня возникают проблемы с этим фрагментом ниже.

#!/usr/bin/python

ACL = 'group:***************: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)

Я добавил эти утверждения печати для отладки и подтвердил, что split производит 3-элементный список, но когда я пытаюсь включить его в 3 переменные, я получаю:

e = "group:***************:r"
type during split = <type 'list'="">
value during split: ['group', '***************', '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
</module></type>

Что мне не хватает?

3 ответа

Возможно тебе следует:

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

поскольку e.split(":") уже является итерируемым с тремя значениями.

Если вы пишете

for (one, two, three) = something

Тогда something должно быть итерируемым из трех значений, например [[1, 2, 3], [4, 5, 6]], но не [1, 2, 3].


for (one, two, three) in e.split(':'):

требует, чтобы e.split() возвращал список итераций (например, двумерный список). for будет перебирать по списку и назначать каждому элементу вложенного списка соответствующие переменные во время этой итерации.

Но e.split() просто возвращает единственный список строк. Вам не нужно итерации, просто назначьте их:

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


Вы можете использовать это:

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

licensed under cc by-sa 3.0 with attribution.