I.はじめに異常
1.異常
プログラムを実行するプロセスでは、以下のようないくつかのエラーがあるでしょう不可避です。
変数の割り当てはありませんでした使用します
存在しないインデックスを使用します
0に加え、
...
プログラム中のこれらのエラーは、我々は異常な呼び出します。
すべての例外コードが実行されることはありません後に例外は、プログラムがすぐに終了します一度このプログラムは、実行されています!
名前のエラー変数が定義されていません
例外は中国の説明の一般的なタイプ:
Systaxエラー構文エラー
IOエラーファイルエラー
ゼロDivisionError 10/0、ゼロ除算エラー
値エラーエラー値
キーボード割り込みプログラムが生成強制終了、Ctrl + Cプログラムを終了
2.例外処理
プログラムが実行されているときに例外が発生しました、私たちの目的は、直接プログラムの終了を作ることではありません!
Pythonは例外が発生したとき、我々は異常を処理するコードを書くことができます希望です!
文を試します
試してみてください。
コードブロック(文が表示される可能性のあるエラー)
異常な例外タイプ名として除きます。
コードブロック(その後のエラー処理)
異常な例外タイプ名として除きます。
コードブロック(その後のエラー処理)
異常な例外タイプ名として除きます。
コードブロック(その後のエラー処理)
そうしないと:
コードブロック(エラー文が実行されるべきではありません)
最終的に:
コードブロック(コードのブロックが常に実行されます)
試みなければならない文は他には行いません持ってい
最終的には少なくとも一つとことを除いて、
可能性のあるエラーコードは、コードがエラーではないのであれば、それは適切に実行されます、ステートメントを試すために配置することができ、
エラーが発生した場合、コードは、私たちは、例外を処理するコードを介しできるように、句を期待実行されます
なぜなら、プログラム全体の終了に異常な結果の回避
第二に、例外の伝播
異常繁殖(スロー)
例外は、関数内で発生した場合、例外が関数で処理された場合は、例外が広がっていきませんが、
異常ハンドラが存在しない場合は、例外が関数の呼び出しに広がっていきます、
ハンドルの機能が扱われていない場合には広がっていない例外は、でコールに普及し続けます
まだ処理されていない場合、プログラムは終了し、ディスプレイは、異常情報、グローバルスコープ(マスターモジュール)に転送されるまで
例外は、プログラムの実行中に発生した場合、すべての例外情報は、特別な例外オブジェクトに保存され、
そして、それは、実際には、でスローされた例外オブジェクトを呼び出す伝播します
例えば:他の特別なクラスZeroDivisionError例外を表すオブジェクト0
NameErrorエラー例外処理変数に設計されたオブジェクトのクラス
....
Pythonは、私たちのために、ターゲットの異常の数を提供します
例外を投げます
- あなたは、例外をスローするステートメントを上げることができます
- 例外クラスの例とraise文への必要性や異常
例外は中国の説明の一般的なタイプ:
第三に、例外オブジェクト
印刷(「異常の前に」)
L = []
試してみてください。
#プリント(C)
#1 [10]
印刷(10/0)
NameErrorを除きます:
ではない、それはすべての例外を捕捉しますその時点でコンテンツのいずれかを除いた場合#
#除いた後の場合には珍しいタイプを踏襲するので、この時間は、それが唯一の例外の種類をキャプチャします
印刷(「異常NameErrorを発生」)
ZeroDivisionError除きます:
印刷(「異常ZeroDivisionErrorを発生」)
IndexErrorを除きます:
印刷(「異常はIndexErrorを発生」)
#例外は、それが例外が続いている場合を除いて、すべての例外クラスのスーパークラスです、彼はすべての例外を捕捉します
xxのxxはバックで例外クラスの例外オブジェクトであるとして#この時点で、あなたは従うことができます
eと例外を除きます。
印刷( '不明な例外'、E、タイプ(e)参照)
最終的に :
印刷(「かかわらず、例外が発生するかどうかの、句が実行されます」)
印刷(「異常」)
第四に、カスタム例外オブジェクト
内蔵の例外使用してExceptionオブジェクトハンドリングシステム、あなたはまた、独自の例外クラスを作成することができます
カスタム例外クラスは、単にクラスを作成し、その継承の例外(すべての例外クラスの親クラス)へ
クラスMyError(例外):#は、Exceptionのサブクラスを作成します
我々はプロパティとメソッドの主要部分を書くことができます#を渡すことも、空白のままにすることができます
上昇させる例外は、クラスまたはインスタンス例外クラスの背後にある可能な例外で、(全体の)外にスローされ、
デフ(A、B)を追加します。
#での呼び出しに例外をスロー負の数とBがある場合
:<0またはb <0の場合
#昇給例外
ここで#スローオブジェクトの呼び出しに問題がありました、あなたはそれを自分で処理したい呼び出し側に伝えます
#上げる例外(「二つのパラメータが負を持つことができません!」)
レイズMyError(「カスタム例外」)
それ以外の場合は#ハンドルが異常に置き換えることができます
#リターンなし
戻りR
印刷(アドオン(-123456))
カスタム関数は、状況が変更される発信者を強制するために、非標準入力または間違って解決することができ、あなたが所定の位置にif文とリターンを使用することができます例外がスローされますが、比較的トラブル