5

これは Learn Python the Hard Way の演習 15 ですが、私はPython 3を使用しています。

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 = input()
txt_again = open(file_again)
print txt_again.read()

ファイルは ex15.py として保存され、ターミナルから実行すると、最初は ex15.txt が正しく読み取られますが、2 回目に要求するとエラーが発生します。

user@user:~/Desktop/python$ python ex15.py ex15.txt<br>
Here's your file 'ex15.txt':<br>
This is stuff I typed into a file.<br>
It is really cool stuff.<br>
Lots and lots of fun to have in here.<br>

I'll also ask you to type it again:<br>
ex15.txt <b>#now I type this in again, and I get a following error</b><br>
Traceback (most recent call last):<br>
  File "ex15.py", line 11, in <<module>module><br>
    file_again = input()<br>
  File "<<string\>string>", line 1, in <<module>module><br>
NameError: name 'ex15' is not defined

どうしたの?

4

4 に答える 4

7

Python 3 を使用していないことは間違いありません。これを明確にするいくつかの点があります。

  • これらのprintステートメントには括弧がありません (Python 3 では必要ですが、2 では必要ありません)。

    print ("Here's your file %r:") % filename
    print txt.read()
    
    print txt_again.read()
    
  • これはPython 3 で変更されevalinput()呼び出しです:

    file_again = input()
    

ほとんどの場合、Python 2 がシステムのデフォルトですが、これをスクリプトの最初の行として追加することで、スクリプトが常に Python 3 を使用するようにすることができます (直接実行している場合は、 のように./myscript.py)。

#!/usr/bin/env python3

または、Python 3 で明示的に実行します。

python3 myscript.py

もう 1 つ注意: 作業が終わったら、ファイルを閉じる必要があります。これを明示的に行うことができます:

txt = open(filename)
# do stuff needing text
txt.close()

または、withステートメントを使用して、ブロックが終了したときにそれを処理します。

with open(filename) as txt:
    # do stuff needing txt
# txt is closed here
于 2012-10-18T22:27:30.970 に答える
5

あなたの印刷ステートメントは、タイトルで言ったようにpy3kを使用していないことを示唆しています。

print txt.read()これは py3k では機能しないため、実際に py3k を使用していることを確認してください。

raw_input()の代わりに使用する必要がありinput()ますpy 2.x

py 2.x の例:

>>> x=raw_input()
foo
>>> x=input()   # doesn't works as it tries to find the variable bar
bar                    
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'bar' is not defined

例 py 3.x:

>>> x=input()
foo
>>> x       # works fine
'foo'
于 2012-10-18T22:21:27.920 に答える
3

Python 3.0 を使用していないようです。これを確認するには、ターミナル ウィンドウに次のように入力します。

python

インタプリタの起動時に表示される情報行を見てください。

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel
32
Type "help", "copyright", "credits" or "license" for more information.


for python 2.7.3、 for のように、代わりにpython 3.X.X言う必要があります。python 3.X.X

Python 2.X を使用している場合Ashwini Chaudharyは、正解があります。

于 2012-10-18T22:25:26.127 に答える
0

py3k の場合、次のコードを試してください。

txt = open(filename, 'r')
print('Here\'s your file %r: ' % filename)
print(txt.read())
txt.close()

print('I\'ll also ask you to type it again: ')
file_again = input()
txt_again = open(file_again, 'r')
print(txt_again.read())
txt_again.close()
于 2012-10-19T19:02:27.723 に答える