Pythonでこのコードを実行すると:
from sys import argv
script, user_name =argv
Prompt = '>'
print "Hi %s, I'm the %s script." % (user_name, script)
私はこのエラーを受け取ります:
Traceback (most recent call last):
script, user_name =argv
ValueError: need more than 1 value to unpack
そのエラーはどういう意味ですか?
おそらく、コマンドラインで引数を指定しなかったのでしょう。その場合、sys.argv
には1つの値のみが含まれますが、user_name
とscript
の両方に値を提供するには、2つの値が必要です。
'' ValueError:アンパックするために複数の値が必要です ''を取得しているのは、スクリプト(この場合はex14.py)の値を1つだけ指定したためです
問題は、.pyファイルを実行した後に名前を追加するのを忘れたことです。
コードの3行目は
script, user_name = argv
スクリプトはex14.pyで、名前を追加するのを忘れた
あなたの名前がマイケルの場合、ターミナルに入力する内容は次のようになります。
> python ex14.py michael
この変更を加えると、コードは完全に実行されます
インタラクティブインタープリターでこの特定のコードを実行することはできません。このように引数を渡すことができるように、最初にファイルに保存する必要があります
$ python hello.py user338690
以下の行のように変化する可能性のある値でタプルの逆参照を行うべきではありません。
script, user_name = argv
1つ未満の引数または複数の引数を渡すと、上記の行は失敗します。これを行うより良い方法は、次のようなことです。
for arg in argv[1:]:
print arg
原因は、引数を出力する以外のことです。たぶん、渡された引数に応じて変数を設定する「for」ループに一連の「if」ステートメントを入れます。さらに良い方法は、getoptまたはoptparseパッケージを使用することです。
引数を 'argv'に保存するには、ターミナルで引数を渡す必要があります。この変数は、実行時にPythonスクリプトに渡す引数を保持します。後で引数を解凍し、プログラムで指定したさまざまな変数に保存します。
script, first, second = argv
print "Your file is:", script
print "Your first entry is:", first
print "Your second entry is:" second
次に、コマンドラインで次のようにコードを実行する必要があります。
$python ex14.py Hamburger Pizza
出力は次のようになります。
Your file is: ex14.py
Your first entry is: Hamburger
Your second entry is: Pizza
出力を取得するには、次の方法でコードを実行する必要があります。
python file_name.py user_name
このコードは Exercise 14:Prompting And Passing で見つかったと思います。
以下をせよ:
script = '*some arguments*'
user_name = '*some arguments*'
そしてそれは完全に動作します
このエラーは
argv#これは、スクリプトの呼び出しで渡す変数を保持している引数変数です。
だから今代わりに
Python abc.py
行う
python abc.py yourname {argvを保存するために作成した変数を渡します}