抜粋:https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736
エラー処理
高レベルの言語は、組み込みで使用するtry...except...finally...
、エラーハンドリング、より効率的なエラー処理を
プログラマは、独自のエラー処理をせずにコードを記述します。
試します
してみてください: プリント(' 試し... ' ) 、R = 10 / INT(' 2 ' ) 、印刷(' :結果' 、R) を除く電子などとValueError: 印刷(' :とValueError ' 、E) を除くeとZeroDivisionError: 印刷(' ZeroDivisionError:' 、e)の 他: プリント(' エラーなし!' ) 最後に: 印刷(' 最後に... ' ) 印刷(' END ')
- エラーがある場合、エラーの異なる種類に応じて異なるプロセスを使用したことを除いて、発生します。
- int型( '')とValueErrorを開始します
- 10/0トリガZeroDivisionError。
- そうでない場合は、他の実行、の代わりにエラーはありません。
- 最後に、最終的に我々は実行する必要があります
一般的なエラーの種類と継承
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
利益を試します
複数の層を越えてコール。バーにmain()関数の呼び出し()、バーの呼び出しfooが()、限り、エラーが発生した時のようにtryが処理されます。
デフのfoo(S): 復帰 10 / INT(s)は デフバー(S): リターンのfoo(S)* 2 デフメイン(): 試してみる: バー(' 0 ' ) を除き、Eなど例外: 印刷(' エラー:' 、E) 最後に: プリント(' 最後に... ')
コールスタック
エラーがキャッチされていない場合、それは投げされていたであろう、最後に撮影したPythonインタプリタはエラーメッセージを表示し、プログラムを終了します。
エラーメッセージがありますTraceback (most recent call last)...。它是一个错误路径。可以在最后查看错误原因,定位错误位置。
ロギングモジュール
あなたはログにエラー情報を記録することができます。そして、プログラムは継続してみましょう。
#err_logging.py インポートログ デフのfoo(S): 復帰 10 / INT(s)は デフバー(S): リターンのfoo(S)* 2 デフメイン(): 試してみる: バー(' 0 ' ) を除き、例外eと: logging.exception(e)の メイン()印刷(' END ')
エラーをスロー
エラーは、間違いをキャプチャすることは、クラスのインスタンスをキャプチャするクラスです。だから、エラーが意図的に作成された状況に応じたエラーインスタンスです。
組み込み関数のエラーの様々な種類があります。また、独自の関数を書くことができ、その後、エラーがスローされます。
#err_raise.py クラスFooError(とValueError): 渡す デフFOO(S): N = INT(S) 場合 == N 0: 昇給 FooError(' 無効な値:%S '%S) リターン 10 / N のfoo(' 0 ")
- 書き込みエラークラスFooError。
- 昇給の声明、生成されたインスタンスFooError。
組み込み関数を使用してみてください。このようなとValueError、TypeError例外として