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?
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
.
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
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
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.
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
Vous devez exécuter votre code de la manière suivante afin d’obtenir votre sortie,
python file_name.py user_name
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
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}