1

私は難しい方法でpythonを学ぶことを読んでいます.15章では、 import argv を使用して変数を割り当て、生の入力を使用してユーザー入力を取得することを想定しています。スクリプトは次のとおりです。

from sys import argv 

script, filename, = argv

txt = open(filename)

print " Here's your file %r :" % filename
print  txt.read()

print " I'll also ask you to type it again: "

file_again = raw_input ("> ")

txt_again = open (file_again)

print txt_again.read ()

このスクリプトを実行すると、値が多すぎてアンパックできませんというエラーが表示されます。

file "ex15.py", line 3, in script , filename = argv
値エラー: アンパックする値が多すぎます

4

4 に答える 4

2

いくつかのポインタ...

from sys import argv  

script, filename, = argv 

ここでは、argv をインポートしてコマンド ライン パラメーターにアクセスし、2 つの引数 (スクリプト (arg 0) と出力するファイル名 (arg1)) が含まれていることを期待しています。末尾のコンマは構文的に間違っているわけではありませんが、必須ではなく、少し奇妙に見えます。argv通常、現在の名前空間にプルするのではなく、内部に残しsysますが、それは好みの問題です。実際の違いはありません。私はおそらく少しのエラー処理も投げ込むでしょう:

import sys

try:
    script, filename = sys.argv
except ValueError as e:
    raise SystemExit('must supply single filename as argument')

txt = (filename) 

print " Here's your file %r :" % filename 
print  txt.read() 

ここでtxt = (name)行っているのは、txt に filename の値を持たせることだけです。txtファイルオブジェクトを作成して、そこからできるようにしたいと思います.read()

txt = open(filename)
print "Here's the file contents of:", filename
print txt.read()

print " I'll also ask you to type it again: "     
file_again = raw_input ("> ")     
txt_again = open (file_again)      
print txt.again.read ()

open()ここには がありますが、それ以外の場合は が得られるtxt.again.read()はずです。それを変更するだけで問題ありません。txt_again.read()AttributeError

別の方法として、シークをサポートするファイル オブジェクトを使用して、ファイルだけを取得することもできrewindます (ファイルを最後まで読んだので、もう何も読む必要はありません)。

txt.seek(0)
print txt.read()
于 2012-10-06T09:00:23.813 に答える
0

わかりましたので、スクリプトを正しく呼び出していないという問題が見つかりました。たとえば、私のpyスクリプトはex15.pyで、そのスクリプトではrw入力とargv変数を使用してテキストを読み取ります。そのファイル名は ex15_sample です。スクリプトを python ex15.py ex15_sample で呼び出します。前回の演習で混乱しました。スクリプトを呼び出すために argv で設定した変数を使用した場所。しかし、すべてのフィードバックは非常に役に立ち、私も応募しました。

于 2012-10-07T01:14:59.457 に答える
0

スクリプトをどのように実行していますか?

あなたが言う時、

script, filename = argv

に 2 つのアイテムが必要ですargv。1 つ目はスクリプト名で、2 つ目はファイル名です。2 つ以上の引数を指定してスクリプトを実行しようとすると、このようなエラーが発生します。

python myscript.py myfile.py somethingelse

スクリプトにもう 1 つのパラメーターを渡したい場合は、値をアンパックする 3 番目の変数を指定する必要があります。このようなもの

script, filename, option = argv

また、完全なトレースバックを貼り付けると役立ちます

于 2012-10-06T07:08:11.327 に答える
-1

余分なコンマがあります

script, filename, = argv

そのはず

script, filename = argv
于 2012-10-06T05:31:39.110 に答える