2017-07-01 5 views
0

Mein Code auspacken:Valueerror zu viele Werte

from sys import argv 
pl_magic, pl_pet = argv 
pl_enemy = raw_input("The second enchanter:") 
print "The most powerful enchanter is",pl_magic 
print pl_pet,"is the pet of",pl_magic 
print "They hate %s" %pl_enemy 

Ausgabe in Powershell:

PS D:\FILE\LPHW> python ex13b.py 1 2 3 
Traceback (most recent call last): 
    File "ex13b.py", line 2, in <module> 
    pl_magic, pl_pet = argv 
ValueError: too many values to unpack 

Ich frage mich, was mit dem Code falsch ....

+0

Bearbeiten Sie Ihre Frage zu verwenden, richtige Codeformatierung. –

+0

Mögliches Duplikat von [Python ValueError: zu viele Werte zum Entpacken] (https://stackoverflow.com/questions/7053551/python-valueerror-too-many-values-to-unpack) – LotPings

Antwort

0

Argv Array enthält nicht nur Kommandozeilenargumente, sondern auch Name des laufenden Skripts.

argv[0] = "ex13b.py" 

Auch durch

pl_magic, pl_pet = argv 

Schreiben Sie erwarten argv nur zwei Werte enthalten, während in der Befehlszeilenargumente Sie 3 Argumente geben. Damit enthält argv insgesamt 4 Werte, da der erste Wert immer der Skriptname ist.

Der Code sollte wie folgt aussehen:

script_name, pl_magic, pl_pet, third_argument = argv 

Dass gesagt wird, sollten Sie nicht nur versuchen, die Dinge blind zu entpacken, sondern auch einige Prüfungen beispielsweise hinzufügen:

args_count = len(argv) - 1 
if args_count < 3: 
    #do something if not enough arguments provided 
0

Wenn Sie do:

pl_magic, pl_pet = argv 

Und geben Sie die Parameter ein (denken Sie daran, Sie sollten den Dateinamen in accoun nehmen t in sys.argv):

ex13b.py 1 2 3 

Sie führen tatsächlich die folgende Zeile:

pl_magic, pl_pet = ['ex13b.py', '1', '2', '3'] 

Wenn Werte in Variablen Auspacken, müssen Sie die gleiche Anzahl von Variablen und Werte. Aus diesem Grund wird Ihr Code nicht funktionieren.

können Sie verwenden:

_, par1, par2, par3 = sys.argv 

In Python 3 Sie können auch verwendet werden:

_, par1, *par2 = sys.argv 

Welche führen zu:

_ = 'ex13b.py' 
par1 = '1' 
par2 = ['2', '3'] 
Verwandte Themen