2010-05-11 9 views
40

In Python, wenn ich diesen Code ausführen:Python-Fehler: "Valueerror: Notwendigkeit, mehr als 1 Wert auspacken"

from sys import argv 

script, user_name =argv 
prompt = '>' 

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

ich diesen Fehler:

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

Was bedeutet, dass Fehler bedeuten ?

+2

Sind Sie rufen das Skript mit einem Argument auf? –

+0

Ja, ich versuche ein Skript zu schreiben, das Argumente akzeptiert. –

Antwort

35

Wahrscheinlich haben Sie kein Argument in der Befehlszeile angegeben. In diesem Fall enthält sys.argv nur einen Wert, aber es müssten zwei sein, um Werte für user_name und script bereitzustellen.

5

Sie können dieses bestimmte Codeelement nicht im interaktiven Interpreter ausführen. Sie müssen sie in eine Datei zuerst speichern, damit Sie das Argument, um es wie dieses

$ python hello.py user338690 
3

passieren können Sie sollten nicht Tupel dereferencing auf Werten zu tun, die unten wie Ihre Linie ändern.

script, user_name = argv 

Die obige Zeile schlägt fehl, wenn Sie weniger als ein Argument oder mehr als ein Argument übergeben. Ein besserer Weg, dies zu tun ist, so etwas zu tun:

for arg in argv[1:]: 
    print arg 

Von führen, dass Sie etwas anderes als drucken Sie args tun. Vielleicht fügen Sie eine 'if' Anweisung in die for-Schleife ein, die Variablen abhängig von den übergebenen Argumenten setzt. Ein noch besserer Weg ist die Verwendung der Pakete getopt oder optparse.

1

Sie sollten Ihren Code in einer folgenden Art und Weise erhalten, um die Ausgabe ausführen,

python file_name.py user_name 
9

youre ‚immer‘ Valueerror: Notwendigkeit, mehr als 1 Wert auspacken ‚‘, weil Sie nur einen Wert hat, das Skript (die ist in diesem Fall ex14.py)

Das Problem ist, dass Sie vergessen haben, einen Namen hinzuzufügen, nachdem Sie die .py-Datei ausgeführt haben.

Linie 3 des Codes ist

script, user_name = argv 

das Skript ex14.py ist, können Sie einen Namen nach

so, wenn Ihr Name michael hinzuzufügen vergessen war, also, was Sie in das Terminal eingeben sollte in etwa so aussehen:

> python ex14.py michael 

machen diese Änderung und der Code läuft perfekt

3

Sie müssen die Argumente im Terminal übergeben, um sie in 'argv' zu speichern. Diese Variable enthält die Argumente, die Sie bei der Ausführung an Ihr Python-Skript übergeben.Es entpackt später die Argumente und speichert sie in verschiedenen Variablen, die Sie im Programm angeben, z.

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

dann in der Befehlszeile müssen Sie Ihren Code wie folgt

, laufen
$python ex14.py Hamburger Pizza 

Die Ausgabe wird wie folgt aussehen:

Your file is: ex14.py 
Your first entry is: Hamburger 
Your second entry is: Pizza 
0

Dieser Fehler ist, weil

argv # was Argumentvariable ist, die hält die Variablen, die Sie mit einem Aufruf an das Skript übergeben.

so jetzt statt

Python abc.py

tun

Python abc.py IhrName {die Variable übergeben, die Sie speichern gemacht argv}

+1

Es scheint, das OP hat bereits eine ähnliche Antwort und markiert es als akzeptiert. Warum antwortest du mit denselben Informationen? –

Verwandte Themen