2015-07-19 1 views
1

Я использую Macbook Pro, работающий под управлением OS X Yosemite 10.10.4, и выполнял упражнения в Learn Python Hard Way. Я бегу это на IPython ноутбуках, и их конфигурации, как показано ниже:«ValueError: слишком много значений для распаковки» в Learn Python Hard Way, Ex 13

Python 2.7.10 |Anaconda 2.2.0 (x86_64)| (default, May 28 2015, 17:04:42) [GCC 4.2.1 (Apple Inc. build 5577)]

На Ex13, указанный на http://learnpythonthehardway.org/book/ex13.html я напечатал и/или скопировать точный код на сайте, но получил сообщение об ошибке.

from sys import argv 
script, first, second, third = argv 
print "The script is called:", script 
print "Your first variable is:", first 
print "Your second variable is:", second 
print "Your third variable is:", third 

На выполнения кода, сообщение об ошибке я получаю это:

ValueError Traceback (most recent call last) in() ----> 1 script, first, second, third = argv

ValueError: too many values to unpack

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

from sys import argv 
script = argv 
print "The script is called:", script 

Выход для приведенной выше коды:

The script is called: ['/Users/myusername/anaconda/lib/python2.7/site-packages/IPython/kernel/main.py', '-f', '/Users/myusername/.ipython/profile_default/security/kernel-261810c2-9f04-44d4-95f7-411e0db361ff.json', '--profile-dir', '/Users/myusername/.ipython/profile_default']

Что может быть возможными причинами для этого, и как я мог бы идти о выпрямлении это?

Обновление: Я попытался запустить это через терминал, как было предложено, и это был ответ, который я получил. enter image description here

+0

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

+0

В основном проблема заключается в том, что у вас есть 4 параметра, но ваш сценарий ожидает 3. Попробуйте помещать 'print (len (argv))' перед распаковкой кортежа и посмотреть, что из этого получилось. Если это ничего, кроме 4, у вас будут проблемы. Второй фрагмент кода напечатает весь «argv» независимо от количества параметров и, следовательно, не будет проблемой. – shuttle87

+0

Спасибо, но это ограничение ноутбуков ipython, что код будет работать через Terminal, но не при использовании ноутбуков? – user2762934

ответ

1

Его как следует из соображений - ValueError: too many values to unpack. Слишком много значений с правой стороны, но недостаточно имен/переменных с левой стороны, чтобы принять их все.

В вашем случае ваш argv имеет 5 элементов, но вы пытаетесь сохранить их в 4 элементах. Я предполагаю, что это связано с ipython-ноутбуком.

Вы должны вызвать скрипт из командной строки (терминала) (так же, как упражнение говорит вам) -

python <file> <args> 
0

Просто запустите скрипт из терминала, как показано ниже:

$> python ex13.py user_name 
Смежные вопросы