Вопрос по python – ValueError: нужно больше 1 значения для распаковки python

9

У меня есть существующее меню, которое дает вам вариантыL или жеD. L должен загрузить содержимое файла иD должен отобразить это.

if option == "l" or option == "L":
    with open("packages.txt") as infp:
        for line in infp:
         line = line.rstrip()
         name,adult,child= line.split(',')

if option == "d" or option == "D":
    print ((name)," - ",(adult)," / ",(child))

Однако, когда я пытаюсь запустить это, я получаю ошибку:

name,adult,child= line.split(',')
ValueError: need more than 1 value to unpack

Почему я получаю эту ошибку?

К вашему сведению: вы также можете сказатьoption.upper() == 'L' и сделать ваш код немного легче для чтения и обслуживания / обновления. bossylobster
отличная идея. благодарю вас EatMyApples

Ваш Ответ

3   ответа
2

line.split(',') возвращает кортеж Ты тогдаun-pack этот кортеж, написав:

name,adult,child= line.split(',')

Если в кортеже нет ровно трех элементов, распаковка не удалась. В вашем случае сообщение об ошибке гласит, что у вас есть только один элемент. Так,line.split(',') явно возвращает кортеж только с одним элементом. А это значит, чтоline не имеет запятых.

Возможно, это означает, что ваши входные данные не соответствуют вашим ожиданиям. Вы требуете, чтобыline является строкой, содержащей три значения, разделенных запятыми, но во входных данных есть строка, которая не соответствует этому требованию.

Меньше или больше, чем три элемента. Вы связаны именно с тремя элементами здесь.
Ну, вы должны понять, почему это происходит. Мы не можем знать почему. Все, что мы можем сделать, это сказать вам, что ваши входные данные не соответствуют вашим ожиданиям.
Есть ли способ это исправить? EatMyApples
13

Это означает, что есть строка вpackages.txt что когда вы убираете пробелы и разделяете запятыми, не получается ровно три части. Фактически, кажется, что он дает только 1 кусок («требуется более 1 значения для распаковки»), что указывает на то, что в строке вообще нет запятых.

Возможно, есть пустые строки или комментарииpackages.txt?

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

Хорошо, это сработало, но теперь для print ((имя), "-", (взрослый), "/" (дочерний)) он говорит, что переменная "имя" не определено? EatMyApples
Почему вы ожидаетеname определиться там? Он устанавливается только когда опцияL взят. Вы сделали L перед D, который вызывает использование второго блока?
3

Эта ошибка происходит в

name,adult,child= line.split(',')

Когда вы назначаете три переменные слева, предполагается, что у вас есть три кортежа справа. В этом примере это выглядитline без запятойline.split(',') в результате получается список только с одной строкой, поэтому ошибка «больше1 значение для распаковки & quot ;.

Да. Переменнаяname будет установлен толькоif option == "l" or option == "L" как вы укажете. В другом случаеoption == "d" or option == "D", такname не будет вglobals() и вы получитеNameError когда вы пытаетесь использовать это. Если вы установите имя в другом месте, вы получите сообщение об ошибке сadult а затем сchild.
Разделить на случаи, которые обусловливают стоимостьline.split(',')В частности, длина выхода. Если вы предполагаете, что файл также будет иметь три элемента, вам необходимо выяснить, почему эта строка не имеет значения.
Спасибо. Я все исправил! теперь он отображает одну строку файла .txt. Я хочу сделать так, чтобы он отображал несколько строк. Есть способ сделать это? EatMyApples
я исправил это, но теперь для печати ((имя), "-", (взрослый), "/" (ребенок)) он говорит, что переменная "имя" не определено? EatMyApples
Так что ты предлагаешь мне делать? EatMyApples

Похожие вопросы