web-dev-qa-db-fra.com

Erreur Python: "ValueError: besoin de plus d'une valeur pour décompresser"

En Python, quand je lance ce code:

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

Qu'est-ce que cette erreur signifie?

44

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 faudrait en avoir deux pour fournir des valeurs pour user_name et script.

38
David Z

vous obtenez '' ValueError: besoin de plus d'une valeur à décompresser '', car vous n'avez donné qu'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.

la 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 vous vous appelez Michael, alors ce que vous entrez dans le terminal devrait ressembler à ceci:

> python ex14.py michael

faire ce changement et le code fonctionne parfaitement

8
Aesthete

Vous ne pouvez pas exécuter ce morceau de code particulier dans l'interpréteur interactif . Vous devez d'abord l'enregistrer dans un fichier pour pouvoir lui passer l'argument comme ceci.

$ python hello.py user338690
4
John La Rooy

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

 script, user_name = argv

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

 for arg in argv[1:]:
     print arg

Bien sûr, vous ferez autre chose que d’imprimer les arguments. Peut-être mettre une série d'instructions 'if' dans la boucle 'pour' qui définissent les variables en fonction des arguments passés. Une méthode encore meilleure consiste à utiliser les packages getopt ou optparse.

3
cnobile

Vous devez passer les arguments dans le terminal pour pouvoir les stocker dans 'argv'. Cette variable contient les arguments que vous transmettez à votre script Python lorsque vous l'exécutez. Il décompresse ensuite les arguments et les stocke dans différentes variables spécifiées 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 ceci,

$python ex14.py Hamburger Pizza

Votre sortie ressemblera à ceci: 

Your file is: ex14.py
Your first entry is: Hamburger
Your second entry is: Pizza
3
Naren Baskara Rao

Vous devez exécuter votre code de la manière suivante afin d’obtenir votre sortie, 

python file_name.py user_name
1
Abhay

Je suppose que vous avez trouvé ce code sur Exercice 14: Prompting And Passing .

Faites ce qui suit:

script = '*some arguments*' 
user_name = '*some arguments*'

et cela fonctionne parfaitement

1
user1582256

Cette erreur est parce que 

argv # qui est une variable d'argument contenant les variables que vous transmettez avec un appel au script.

alors maintenant à la place 

Python abc.py

faire

python abc.py votrenom{transmet la variable que vous avez créée pour stocker argv}

0
Nikhil Karki