Ошибка Python: «ValueError: нужно более 1 значения для распаковки» - PullRequest
46 голосов
/ 12 мая 2010

В Python, когда я запускаю этот код:

from sys import argv

script, user_name =argv
prompt = '>'

print "Hi %s, I'm the %s script." % (user_name, script)

Я получаю эту ошибку:

Traceback (most recent call last):  
script, user_name =argv  
ValueError: need more than 1 value to unpack

Что означает эта ошибка?

Ответы [ 8 ]

38 голосов
/ 12 мая 2010

Возможно, вы не указали аргумент в командной строке. В этом случае sys.argv содержит только одно значение, но должно иметь два, чтобы обеспечить значения для user_name и script.

.
8 голосов
/ 07 февраля 2013

вы получаете '' ValueError: вам нужно более 1 значения для распаковки '', потому что вы дали только одно значение, сценарий (в данном случае ex14.py)

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

строка 3 вашего кода

script, user_name = argv

скрипт ex14.py, вы забыли добавить имя после

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

> python ex14.py michael

внесите это изменение, и код будет отлично работать

4 голосов
/ 12 мая 2010

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

$ python hello.py user338690
3 голосов
/ 28 февраля 2016

Вы должны передать аргументы в терминале, чтобы сохранить их в 'argv'. Эта переменная содержит аргументы, которые вы передаете своему скрипту Python при запуске. Позже он распаковывает аргументы и сохраняет их в разных переменных, которые вы указали в программе, например,

script, first, second = argv
print "Your file is:", script
print "Your first entry is:", first
print "Your second entry is:" second

Затем в командной строке вы должны запустить свой код следующим образом:

$python ex14.py Hamburger Pizza

Ваш вывод будет выглядеть так:

Your file is: ex14.py
Your first entry is: Hamburger
Your second entry is: Pizza
3 голосов
/ 12 мая 2010

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

 script, user_name = argv

В строке выше произойдет сбой, если вы передадите менее одного аргумента или более одного аргумента. Лучший способ сделать это - сделать что-то вроде этого:

 for arg in argv[1:]:
     print arg

Конечно, вы будете делать что-то кроме печати аргументов. Возможно, поместите серию операторов if в цикл for, которые устанавливают переменные в зависимости от переданных аргументов. Еще лучший способ - использовать пакеты getopt или optparse.

1 голос
/ 08 августа 2012

Полагаю, вы нашли этот код в Упражнение 14: запрос и передача .

Выполните следующие действия:

script = '*some arguments*' 
user_name = '*some arguments*'

и это прекрасно работает

1 голос
/ 14 октября 2011

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

python file_name.py user_name
0 голосов
/ 11 июля 2017

Эта ошибка из-за

argv # - переменная аргумента, содержащая переменные, которые вы передаете при вызове скрипта.

так что теперь вместо

Python abc.py

сделать

python abc.py yourname {передать переменную, которую вы сделали для хранения argv}

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