2010-05-11 10 views
40

w Pythonie, kiedy uruchomić ten kod:Python Błąd: "ValueError: Potrzeba więcej niż 1 wartość rozpakować"

from sys import argv 

script, user_name =argv 
prompt = '>' 

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

otrzymuję ten błąd:

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

Co to błąd oznacza ?

+2

Czy dzwonisz do skryptu z argumentem? –

+0

Tak, próbuję napisać skrypt, który akceptuje argumenty. –

Odpowiedz

35

Prawdopodobnie nie podałeś argumentu w wierszu poleceń. W takim przypadku sys.argv zawiera tylko jedną wartość, ale musiałaby mieć dwie wartości, aby zapewnić wartości dla obu wartości: user_name i script.

5

Nie możesz uruchomić tego konkretnego fragmentu kodu w Interaktywnym tłumaczu. Musisz zapisać go do pliku najpierw tak, że można przekazać argument to tak

$ python hello.py user338690 
3

Nie należy robić krotka dereferencing na wartości, które mogą zmieniać się jak poniżej linii.

script, user_name = argv 

Powyższa linia nie powiedzie się, jeśli przekażemy mniej niż jeden argument lub więcej niż jeden argument. Lepszym sposobem na to jest zrobić coś takiego:

for arg in argv[1:]: 
    print arg 

przyczyny zrobisz coś innego niż drukować args. Może umieścić serię instrukcji "if" w pętli "for", która ustawia zmienne w zależności od przekazanych argumentów. Jeszcze lepszym sposobem jest użycie pakietów getopt lub optparse.

1

Należy uruchomić swój kod w następujący sposób, aby uzyskać wyjście,

python file_name.py user_name 
9

jesteś coraz „” ValueError: Potrzeba więcej niż 1 wartość rozpakować „”, bo tylko dał jedną wartość, skrypt (który jest ex14.py w tym przypadku)

Problem polega na tym, że zapomniałeś dodać nazwy po uruchomieniu pliku .py.

Linia 3 kodzie jest

script, user_name = argv 

skrypt jest ex14.py, zapomniałeś dodać nazwę po

więc jeśli nazywa się Michael, więc to, co wchodzi w terminalu powinny wyglądać tak:

> python ex14.py michael 

dokonać tej zmiany i kod działa doskonale

3

Musisz przekazać argumenty w terminalu, aby zapisać je w argv. Ta zmienna zawiera argumenty przekazywane do skryptu Python po uruchomieniu.Później rozpakowuje argumenty i zapisuje je w różnych zmiennych określonych w programie, np.

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

Następnie w wierszu poleceń należy uruchomić swój kod tak,

$python ex14.py Hamburger Pizza 

Twój wyjście będzie wyglądać następująco:

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

Ten błąd jest ponieważ

argv #, która jest zmienną argumentu, która trzyma zmienne przekazywane za pomocą wywołania skryptu.

więc teraz zamiast

Python abc.py

zrobić

pyton abc.py Twoja_nazwa {przekazać zmienną, które wprowadzono do przechowywania argv}

+1

Wygląda na to, że PO otrzymał już podobną odpowiedź i oznaczył ją jako zaakceptowaną. Dlaczego odpowiadasz tymi samymi informacjami? –

Powiązane problemy