2011-01-29 12 views
10

Pythonでは、try文はtry節のコードが例外を発生させない場合に実行されるelse節をサポートしています。例:pythonのtry文にelse節が必要なのはなぜですか?

try: 
    f = open('foo', 'r') 
except IOError as e: 
    error_log.write('Unable to open foo : %s\n' % e) 
else: 
    data = f.read() 
    f.close() 

なぜelse節が必要ですか?オープン例外を発生させていない場合

try: 
    f = open('foo', 'r') 
    data = f.read() 
    f.close() 
except IOError as e: 
    error_log.write('Unable to open foo : %s\n' % e) 

は実行がdata = f.read()に進みません。次のように我々は、上記のコードを書くことができませんか?

答えて

14

f.read()またはf.close()コードでエラーが発生した場合の違いは何ですか。この場合:この場合はf.read()またはf.close()

try: 
    f = open('foo', 'r') 
    data = f.read() 
    f.close() 
except IOError as e: 
    error_log.write('Unable to open foo : %s\n' % e) 

エラーがあなたに明らかに間違っているログメッセージ"Unable to open foo"を与えるだろう。この場合

が、これは回避さ:

読み取りまたは終値で
try: 
    f = open('foo', 'r') 
except IOError as e: 
    error_log.write('Unable to open foo : %s\n' % e) 
else: 
    data = f.read() 
    f.close() 

、エラーがログの書き込みを起こさないだろうが、エラーがコールスタックにuncatched上向きに上昇するだろう。

+1

ありがとうLennart。それは非常に明確でした! :)。だから、Javaのような他の言語でtryのelse節を見ないのはなぜですか? :) – John

+10

@John:彼らはPythonほど良くないので? :-) –

2

私の理解から、else句は、例外を管理しようとしているコードにtryブロックの範囲を限定するためのものです。代わりにあなたのtryブロックがより大きく、あなたが捕まえたくない例外をキャッチするかもしれません。

3

elsetryは例外を発生させていない場合を実行しなければならないことをコードに使用されます。 elseが誤ってtry except文によって保護されたコードによって提起されなかった例外をキャッチすることを回避するため

使用elseは、追加try句よりも優れています。

0

@John:
Javaのような言語や他の言語では、例外があります。たとえば、FileNotFound Exception(またはこのようなものですが、私はその名前がわかりません)のようなものです。
このようにして、異なる例外を処理し、それに応じて行動することができます。次に、オープンまたはクローズのためにエラーが発生した理由がわかります。

関連する問題