2017-10-08 11 views
-2

ファイル 'mig.txt'が現在の作業ディレクトリに存在しません。したがって、次のコードではIOError例外が発生し、 'mig.txt'が作成されなかったため 'bat'が定義されていないことを示す 'NameError'も発生するはずです。しかし、たとえファイルが作成されなかったとしても、finallyブロックはどのように正常に動作しますか? Pythonバージョン(3.6.0)に関連するものですか?Pythonの例外

try: 
    bat=open('mig.txt') 
    print(bat.readline(),end='') 
except IOError: 
    print('File error') 
finally: 
    bat.close() 

出力:あなたのpython 3.6でそれを実行したときにあなたが投稿コードで

File error 
+1

どういう意味ですか?属性にアクセスしようとする前に*その名前が存在するかどうかを慎重にチェックします。なぜあなたは名前の誤りを期待するのですか? – jonrsharpe

+0

謝罪。私はちょうど地元の人の 'バット'を取り除くことによってfinallyブロックを編集しなければならなかった: '。私はまだ同じ出力を得る。 –

+0

ファイルmig.txtが作成されていないため、名前のエラーが予想されます。そのため、close()メソッドを正しく呼び出すことは不可能ですか? –

答えて

0

、あなたNameErrorと同様に、出力File errorとして取得します。これが発生する理由は、finallyブロックが(プログラムを終了しない限り)try/catchブロックで何が起こっても常に実行されることです。