Ошибка «Слишком много полей для распаковки», хотя я получил такое же количество полей слева, как и справа - PullRequest
1 голос
/ 23 февраля 2012

Довольно простой код, у меня есть кортеж extraAccessions с двумя значениями, строкой и списком. Я хочу перебрать extraAccessions (который в этом примере только один) и использовать первое и второе значения в кортеже.

extraAccessions=('MS:1000505',['value','unitName'])
for accession, fieldIdentifiers in extraAccessions:
    [do something]

Однако, это дает

ValueError: too many values to unpack

Когда я делаю

print (extraAccessions)

Я получаю

('MS:1000505', ['value', 'unitName'])

Что мне кажется двумя значениями, именно то, что спрашивается в

for accession, fieldIdentifiers in extraAccessions:

Так что я не понимаю, почему я получаю эту ошибку.


редактирование:

И когда я делаю

for accession in extraAccessions:
     print accession

Получаю первый элемент MS: 1000505

Ответы [ 2 ]

7 голосов
/ 23 февраля 2012

Давайте рассмотрим ваш код:

extraAccessions=('MS:1000505',['value','unitName'])
for accession, fieldIdentifiers in extraAccessions:
    ...

Здесь вы перебираете кортеж (extraAccessions), который имеет две записи:

  1. 'MS:1000505'
  2. ['value','unitName']

Затем вы пытаетесь распаковать каждую запись по очереди в две переменные.Это не работает для первой записи, поскольку она не имеет длины два.

Если вы хотите распаковать две записи в две переменные, просто используйте:

accession, fieldIdentifiers = extraAccessions

Это установит

  1. accession на 'MS:1000505'
  2. fieldIdentifiers на ['value','unitName']
0 голосов
/ 23 февраля 2012

Здесь Python обрабатывает кортеж как последовательность, поэтому он пытается сопоставить (по очереди) каждый элемент в последовательности с вашим шаблоном и завершается ошибкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...