-2

Python 2.6で作業していて、迷惑なエラーが発生しましたが、その理由はまだわかりません。関心のあるファイルには、単一の値のみの複数の行が含まれています。これらの値を取得したいと思います。このコードスニペット

f = open(file, 'r')
for line in file:
    value = eval(line)

次のエラーメッセージが表示されます。

   File "<string>", line 1, in <module>
NameError: name 'c' is not defined

だから私はここでStackOverflowについて調べました..この質問と別の質問で..しかし、私は彼らの問題と私の問題との関係を描くのに苦労しています。私が彼らから得たのは、私の使用はeval()Pythonを混乱させる可能性があるということです。評価する必要はなく、実際の変数が表すraw_inputことをPythonに知らせるために使用する必要があります。ただし、コードを次のように修正します。lineline

for line in file:
    value = eval(raw_input(line))

これは次のエラーを引き起こしました(そして端末が過負荷になっている可能性があります..プログラムを終了するまで単にフリーズしました):

File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing

私はここで何が間違っているのですか?eval()SOの周りで使うのが好きではないという事実を拾いました、私はそれが機能であると誤解していますか?
編集:私のファイルは値のリストなので、

2 
3
2
3
1
0

編集だから、それは誤解でした。私のファイル名が一致していないことを指摘してくれたDSMと、 。intのより良い代替手段として引き続き支援および表示してくれたLevonに感謝しますeval

4

3 に答える 3

2

これらの数値をファイルから読み取り、整数に変換したいだけの場合は、これで十分です。

with open('data.txt') as f:
    for line in f:
        value = int(line)

その後、必要に応じて値を使用できます。

余談ですが、ファイルを開くために使用する利点はwith、完了したときに自動的に閉じられるか、例外が発生したことです。

于 2012-07-02T19:42:24.097 に答える
0

ファイルから値を取得したい場合は、eval()これで十分です。これを使用しても意味がありません。

>>> with open('data.txt') as f:
        values=[int(x) for x in f]


>>> values
[2, 3, 2, 3, 1, 0]
于 2012-07-02T19:46:04.363 に答える
0

あなたの質問のタイトルに答えるために、はい、あなたはそれを誤解しています。説明させてください:
evalはあなたがそこに置いたコードを実行します。だからx=eval('c')と同じx=cです。
raw_inputユーザー入力を取得するために使用されます。パラメータは、入力ではなく、ユーザーに表示する文字列です。
ファイルにある値を読み取りたいだけの場合は、次を使用できます。

with open('file') as f:
    for line in f:
        var = int(line)
于 2012-07-02T19:42:47.873 に答える