2010-05-11 5 views
40

En Python, quand je lance ce code:erreur Python: "ValueError: besoin de plus de 1 valeur à déballer"

from sys import argv 

script, user_name =argv 
prompt = '>' 

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

Je reçois cette erreur:

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

Que cette erreur signifie ?

+2

Est-ce vous appelez le script avec un argument? –

+0

Oui, j'essaie d'écrire un script qui accepte les arguments. –

Répondre

35

Vous n'avez probablement pas fourni d'argument sur la ligne de commande. Dans ce cas, sys.argv ne contient qu'une seule valeur, mais il en faudrait deux pour fournir des valeurs à la fois pour user_name et script.

5

Vous ne pouvez pas exécuter ce morceau de code particulier dans l'interpréteur interactif. Vous aurez besoin de l'enregistrer dans un fichier d'abord pour que vous puissiez passer l'argument comme ce

$ python hello.py user338690 
3

Vous ne devriez pas faire tuple déréférencement sur des valeurs qui peuvent changer comme votre ligne ci-dessous.

script, user_name = argv 

La ligne ci-dessus échouera si vous transmettez moins d'un argument ou plus d'un argument. Une meilleure façon de le faire est de faire quelque chose comme ceci:

for arg in argv[1:]: 
    print arg 

de la cause que vous allez faire autre chose que d'imprimer les args. Peut-être mettre une série d'instructions 'if' dans la boucle 'for' qui définit les variables en fonction des arguments passés. Un moyen encore meilleur est d'utiliser les paquets getopt ou optparse.

1

Vous devez exécuter votre code d'une manière suivante pour obtenir votre sortie,

python file_name.py user_name 
9

vous êtes obtenir « » ValueError: besoin de plus de 1 valeur de déballer « », parce que vous ne avez donné une valeur, le script (qui est ex14.py dans ce cas)

le problème est, que vous avez oublié d'ajouter un nom après avoir exécuté le fichier .py.

ligne 3 de votre code est

script, user_name = argv 

le script est ex14.py, vous avez oublié d'ajouter un nom après

donc si votre nom était Michael, alors que vous entrez dans le terminal devrait ressembler à:

> python ex14.py michael 

faire ce changement et le code fonctionne parfaitement

3

Vous devez passer les arguments dans le terminal pour les stocker dans 'argv'. Cette variable contient les arguments que vous transmettez à votre script Python lorsque vous l'exécutez.Il décompresse plus tard les arguments et les stocke dans différentes variables que vous spécifiez dans le programme, par exemple.

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

Ensuite, dans votre ligne de commande, vous devez exécuter votre code comme celui-ci,

$python ex14.py Hamburger Pizza 

Votre sortie ressemblera à ceci:

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

Cette erreur est parce que

argv # qui est la variable d'argument qui contient les variables que vous passez avec un appel au script.

maintenant à la place

Python abc.py

faire

python abc.py votrenom {passer la variable que vous avez fait pour stocker argv}

+1

Il semble que le PO a déjà reçu une réponse similaire et l'a marqué comme accepté. Pourquoi répondez-vous avec la même information? –