2010-05-11 80 views
40

在Python,當我運行這段代碼:Python的錯誤: 「ValueError異常:需要比1點的值更解壓」

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 

是什麼錯誤意味着?

+2

是你用一個參數來調用腳本? – 2010-05-11 20:19:34

+0

是的,我正在嘗試編寫一個接受參數的腳本。 – 2010-05-11 20:53:19

回答

35

也許你沒有在命令行中提供參數。在這種情況下,sys.argv只包含一個值,但爲了提供user_namescript的值,它必須有兩個值。

5

你不能在交互式解釋器中運行這段代碼。 你需要將其保存到一個文件中第一次這樣就可以傳遞參數給它這樣的

$ python hello.py user338690 
3

你不應該做的元組解引用上,可以像下面的行更改值。

script, user_name = argv 

如果您傳遞少於一個參數或多個參數,上面的行將失敗。這樣做的一個更好的方法是做這樣的事情:

for arg in argv[1:]: 
    print arg 

因爲你會做一些事情,而不是打印參數。也許在'for'循環中放置一系列'if'語句,根據傳遞的參數設置變量。更好的方法是使用getopt或optparse包。

1

您應該運行在隨後的方式你的代碼,以便讓你的輸出,

python file_name.py user_name 
9

的youre越來越「」 ValueError異常:需要1個多值解包',因爲你只給了一個值,該腳本(在這種情況下是ex14.py)

問題是,您忘記在運行.py文件後添加名稱。你的代碼的

線3是

script, user_name = argv 

劇本ex14.py,你忘了後

因此,如果你的名字是邁克爾,讓你進入終端應該添加一個名字看起來是這樣的:

> python ex14.py michael 

進行此更改和代碼運行完全

3

您必須通過終端中的參數才能將它們存儲在'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 
0

這個錯誤是因爲

argv#這是參數變量持有通過調用腳本傳遞的變量。

所以現在反而

的Python abc.py

蟒蛇abc.py提供yourname {傳遞到您對存儲的argv變量}

+1

看來OP已經有了類似的答案,並將其標記爲已接受。你爲什麼用相同的信息回答? – 2017-07-11 20:30:34