0

モジュールの4行目からアンパックするには値が多すぎます。

script, from_file, to_file = argv  line.

演習17の例

 from sys import argv
 from os.path import exists

 script, from_file, to_file = argv 

私は愚かなことをしていることを知っています。Pythonバージョン2.7.3を使用する

これは、演習からの逐語的なコピーアンドペーストです。

from sys import argv
from os.path import exist

script, from_file, to_file = argv

両方の解決策を試しましたが、無効なsytaxエラーが発生しました

4

3 に答える 3

2

スクリプトを実行するときは、2 つのコマンド ライン パラメーターを指定する必要があります。スクリプトの名前が であると仮定すると、次のtest.pyように実行する必要があります。

python test.py fromfile.txt tofile.txt

次に、変数scriptは「test.py」に等しくなり、「fromfile.txt」に from_file等しくなり、「tofile.txt」to_fileに等しくなります。

于 2013-02-12T19:10:01.507 に答える
1

Pythonでは、このような値をアンパックできます

my_packed_values = ('v1', 'v2', 'v3')
v1, v2, v3 = my_packed_values
print v1
print v2
print v3

v1v2、文字列を一度に 1 つずつ取得しますv3

したがって、3 つの値をアンパックできます。するとv1, v2 = my_packed_values、そのエラーが発生します。

したがって、argvsアンパックするのに十分な値がない場合 (右側の数が左側の数と一致しない)、アンパックするには多すぎます。

これは答えではありませんが、この答えを書いている間に @mbatchkarvo はすでに実際の原因を指摘しています。


あるos.path.exists、ないos.path.exist。ただし、これにより構文エラーが発生することはありません。

于 2013-02-12T19:13:46.203 に答える
0

私のアドバイスは、コマンドライン引数を処理するときに常にエラーチェックを行います。少なくとも次のような単純なもの

from sys import argv,exit
if not len(argv)==3:
   print "argv is" , argv
   print "expected script fromfile tofile"
   exit()
script, from_file, to_file = argv

代わりに、またはおそらくもっとpythonesque:

from sys import argv,exit
try:
   script, from_file, to_file = argv
except:
   print "argv is" , argv
   print "expected script fromfile tofile"
   exit()

sysからのexitのインポートに注意してください

于 2013-02-12T19:22:47.140 に答える