pythonがwindowsの下でファイルIOErrorを作成した理由の1つ

1532 ワード

今日pythonプログラムをテストするときは、本の例に従ってテストします.win 7では常にIOErrorの異常が報告され、開発ツールはeclipse+pydevです.
例は次のとおりです.
'''
Created on 2013-3-31

@author: kazeik
'''
import os

    
if __name__ == '__main__':
    pass
ls = os.linesep

print type(ls)
print ls


fname="d:\test.txt"
all = []

while True:
    if os.path.exists(fname):
        print "error"
    else:
        break

print "
Enter lines ( by itslf to quit).
" while True: entry=raw_input("> ") if entry==".": break else: all.append(entry) fobj = open(fname,"w") fobj.writelines(['%s%s' % (x,ls) for x in all]) fobj.close() print "DONE"

報告された異常は以下の通りである.
Traceback (most recent call last):
  File "D:\USER\j2ee\workspace\P_test\src\MakeTextFile.py", line 35, in <module>
    fobj = open(fname,"w")
IOError: [Errno 22] invalid mode ('w') or filename: 'd:\test.txt'

なぜか分からない.ネットで検索してみると、ネット上の答えは以下の通りです.
【解答】パスは文字列で、中にはtが含まれていて、エスケープ記号なので、ファイルパスに問題があります.winの下のパス区切り記号は反スラッシュでこの問題を引き起こした.あなたはこのようにf=open(r'F:Dropboxpythontest.txt','r')に変更しました.文字列の前にrを付け、raw文字列として宣言すると、その中のエスケープは処理されません.
コードのfnameを変更します
fnameを次のように変更します.
fname=r"d:\test.txt"
この時点でコンソールはエラーを報告せず、実行は通過した.
またpythonはゲート解釈型言語であり,作成したコードは必ず手当たり次第に保存して実行しなければならない.さもないと運行結果が間違って、この習慣は何度も出会った.