Pythonですべての例外をキャッチするのはなぜ悪い考えですか? SystemExit
、KeyboardInterrupt
、およびGeneratorExit
:Pythonですべての例外をキャッチするという悪い考えがある
私はexcept:
句を使用して、すべての例外をキャッチすることも、「特別な」Pythonの例外をキャッチすることを理解しています。だから、なぜすべての例外をキャッチするのにexcept Exception:
節を使用しないのですか?
Pythonですべての例外をキャッチするのはなぜ悪い考えですか? SystemExit
、KeyboardInterrupt
、およびGeneratorExit
:Pythonですべての例外をキャッチするという悪い考えがある
私はexcept:
句を使用して、すべての例外をキャッチすることも、「特別な」Pythonの例外をキャッチすることを理解しています。だから、なぜすべての例外をキャッチするのにexcept Exception:
節を使用しないのですか?
非常に非特異的なので、例外で面白いことをすることはできません。さらに、すべての例外をキャッチしている場合は、起こっていることもわからないような例外が発生する可能性があります(アプリケーションが実際に原因を知ることなく失敗する可能性があります)。あなたは、処理する必要のある例外とその処理方法を具体的に予測することができますが、最初から盲目的にすべてを抑制していると、決して知らないでしょう。
一般的なご要望により、ここに例があります。プログラマーがPythonコードを書いていて、IOError
を取得します。代わりに、さらなる調査のため、彼女はすべての例外をキャッチすることを決定:
def foo():
try:
f = open("file.txt")
lines = f.readlines()
return lines[0]
except:
return None
彼女は彼の方法で問題を認識していません:ファイルが存在し、アクセス可能であるが、それは空で何か?次に、このコードはlines
が空であるためIndexError
を生成します。だから彼女はなぜファイルが存在するときにNone
をこの機能から戻しているのだろうと疑問に思って時間を過ごすだろうし、もし彼女がエラーを捕まえることでより具体的だったら何かを実現することなくロックしていない。存在する。
おそらく、各例外を別々に扱いたいと思うかもしれないからです。 Encodingの問題やOSの問題よりも、KeyInterruptを持つのと同じことではありません。特定の例外を次々に捕まえることができます。
try:
XXX
except TYPE:
YYY
except TYPE:
ZZZ
お奨めは、私はそれが生産コードですべてをキャッチするために、より良いだと思うが、ソフトウェアが開発されているとして、それはデバッグのためにあなたのコードを困難にする可能性がある」日にすべての – jamylak
をキャッチ.... –
@jamylakます。http: //stephenvick.wordpress.com/2010/08/02/pokemon-exception-handling/ –