。異常認識
1. 次の例外指定されたエラーの一般的な種類があります:
範囲外のはIndexErrorシーケンスインデックス
KeyError例外辞書検索キーが存在しません。
これはNameError存在しない変数にアクセスしようとします
IndentationErrorインデントエラー
AttributeError未知のオブジェクトのプロパティにアクセスしよう
呼び出すとStopIterationイテレータこれ以上の値
AssertionErrorが表明(アサート)失敗
ファイルマーカーEOFの例外EOFErrorユーザ入力終了(Ctrlキー+ D)
FloatingPointError浮動小数点演算エラー
GeneratorExit generator.close()メソッドが呼び出されたときにされました
ときはImportErrorインポートモジュールに失敗しました
KeyboardInterruptは、ユーザ入力がキーを中断します(Ctrl + C)
MemoryErrorメモリオーバーフロー(オブジェクトを削除することによってメモリを解放することができます)
満たされていないNotImplementedErrorメソッド
OSErrorの生成異常(例えば、存在しないファイルを開く)オペレーティング・システム
最大制限値演算を超えOverflowErrorを
ReferenceError弱参照(弱い参照)は、ガベージコレクションのオブジェクトにアクセスしようとして回収されました
RuntimeErrorが一般的な実行時エラー
SyntaxError Pythonの構文エラー
TabErrorタブとスペースのミックス
SystemError Pythonのコンパイラシステム・エラー
SystemExitをPythonのコンパイラプロセスが閉じられています
異なる種類の間で不正な操作はTypeError
UnboundLocalErrorアクセス初期化されていないローカル変数(NameErrorのサブクラス)
UnicodeErrorのUnicode関連のエラー(とValueErrorのサブクラス)
符号化UnicodeEncodeErrorをユニコードエラー(はUnicodeErrorサブクラス)
UnicodeDecodeErrorユニコードエラー(はUnicodeErrorサブクラス)復号化
変換はUnicodeTranslateErrorユニコードエラー(はUnicodeErrorサブクラス)
無効なパラメータは、とValueErrorを通過しました
ゼロによる除算ZeroDivisionError
2. 上記のための例として、より一般的なエラーの一部
範囲外#(1)はIndexErrorシーケンスインデックス
#LST = [1,2,3,4,5]
#1 RES = LST [999]
#(2)KeyError 例外辞書検索キーが存在しない
DIC = {「 ':1、' B ':2' C「:3}
#プリント(DIC [ "D"])
(3)#存在しない変数にアクセスしようとNameError
#Print(HHH)
(4)位IndentationErrorインデントエラー
IF 5 == 5:
プリント(55)
#プリント(444)、
(5)#は、位置はAttributeErrorオブジェクト属性にアクセスしようと
MyClassクラス():
= 5
、B = 6。
OBJ = MyClassの()
#1 obj.cの
位(6。 )を呼び出すとStopIterationイテレータには、より多くの価値
= ITER(範囲(3))
I ITにおける用:
印刷(I)
#res =次(IT)
#(7)AssertionError を表明(アサート)が失敗した
'' '
#推測ません図3は、1推測よりも大きい?3が1より大きい場合は
、あなたが間違って推測した場合#、直接の例外
一般的に、テストプログラムで使用される#を
「 ''
#assert指令3 <1
"" "
であれば3 <1:
印刷( "成立")
"""
二つ。基本的な文法を例外処理
#フォーマット:試す: CODE1 CODE2 ... 除い: CODE1 CODE2 への可能性の異常コードこのコードブロックそれらトライ例外エラーが発生した場合には、直接行くexecptこのコードブロック
#(1)例外処理の基本的な構文
例## 1:
トライ:
LST = [1、2 ,. 3 ,. 4]
印刷(LST [9999])、すべての#9999のリストがあるので、プログラムはエラーがすべて含まれてい
:除いて
印刷( "このプログラムはエラーを持っている")
#パスを
#例外処理(2)分岐条件execpt + 例外エラーカテゴリエラーが発生し、この例外に固有の、分岐取る#例2:試して: #を以下の(1)(2)(3)一から一、にそうでない場合は、コメントに対応するコメントを削除することは、所望のプログラム番号に行きます #(1) #1 LST = [1,2,3,45,6] #プリント(LST [10]) #(2)# = {DIC '' :. 1} #プリント(DIC [ 'B']) #(3) プリント(HH)はIndexError除く: (1)# 印刷(「来記載指数インデックスがエラー境界を報告しています。「)を除くKeyError例外: #(2) 印刷(」「報告書は、キーエラーの辞書であることを示し、ここに来る)が発生除い:
#(3)
#条件が満たされていない、分岐は除き行くに
印刷(「プログラムエラー」)
#は、(3)イテレータの誤差範囲で例外クラスによって、受信機のジェネレータ関数は、戻り値を返す ##例3:DEFをmygen() 。収率は、1 収率2 。復帰3 #例えば化生ジェネレータ生成関数発生器生成オブジェクトは呼ばGENL = mygen()を試してください: RES =次に(GENL) RES =次に(GENL) RES =次に(GENL)収量#唯一の二回、三回目は、すべてのエラーコールに 印刷(RES)の名前から呼び出すとStopIterationクラス[対象]を与える、名前のための時間のように#をEとして呼び出すとStopIteration以外: '「」 私たちは、オブジェクトを印刷するとき__str_をトリガ、 _魔法の方法 自動的に呼び出すとStopIterationでこのクラス、受信異常の戻り値を返す __str__印刷対象トリガ方法、及び従って戻り値プリント 「」 ' 印刷(E)を
三。アクティブ投げ 上げ
BaseExcepton例外は、すべてのクラス(基底クラス、スーパークラス)の親である(別名サブクラス: 派生クラスの派生クラス)例外は、すべての通常のエラー処理クラスの親である昇給+(例外クラスかオブジェクトの例外処理)#の形式:試し: 昇給を除く: パス
#trueを返します.ExceptionはBaseExceptionサブクラスである
RES = issubclass(例外、BaseException)
印刷(RES)
(1)構文上げる基本的なフォーマット#
#完全に書かれた
試して:
#は、内部コードに埋め込まれなければならないしてみてください
昇給BaseExceptionを
除い:
印刷(「このプログラムは、例外をスロー」)#
速記の書き込み
「」「
試み:
昇給
を除く:
印刷( 『プログラムが例外をスロー』)
」「」
#(2)独自の例外クラスの
#1 return_errorinfoは例外に依存する必要があります現在の行番号やファイル名をトリガするためのフォームを得る
:(N-)return_errorinfo DEF
インポートSYSの
F = sys.exc_info()[2] .tb_frame.f_back
N IF - == 1:
戻りSTR(f.f_lineno)#は、現在の行を返します番号
のelifのN - == 2:
リターンf.f_code。co_filename#がファイル名を返し
DEF(N)GET_INFO:
試し:
昇給のBaseException
除く:
リターンreturn_errorinfo(N-)
#したい場合は、カスタム例外クラスは、すべての例外の親BaseExceptionの継承しなければなりません
クラスMyException(BaseExceptionを):
DEF __init __(自己、err_num、ERR_MSG、err_line、err_filename):
#印刷エラー番号
self.err_num = err_num
#印刷エラーメッセージ
self.err_msg = ERR_MSG
#印刷エラー行番号
self.err_line = err_line
#印刷エラーファイル
self.err_filename = err_filename
human_sex = "中立"
してみてください。
human_sex ==「でIFセックス":
昇給MyException(1001年、"人間中立的ではない」、GET_INFO(1)、GET_INFO(2))
MyException除くE AS:
#印刷エラー番号の
印刷(e.err_num)
#印刷エラーメッセージの
印刷(e.err_msg)
#行番号の印刷エラー
印刷(e.err_line)
#印刷エラーファイルの
印刷(e.err_filename)
何かを追加します:
....最後に...試みる使用:試し 印刷(名)#エラーかどうか、実行されます最終的には、コードのブロック内の最後に: 渡しまだそこにエラーを送信する場合に算出いくつかのステートメントは、ある電話またはいくつかのロジックに対処したい場合はそう最後に使用した#例:#試し:#印刷(名)##最後に:#印刷(123) #印刷(456)エラーがある場合、コンテンツが他のコードを実行されていないコードのtryブロックは、エラーなしならば、それ以外を実行しますブロックコンテンツ... ELSE ...他に独立したアウトと一緒に使用することはできませんし、使用してみてください。execptしようとしてみてください...使用して一緒に取り付けることができ、最後に.... してみてください... ELSE ... execpt 使用はしてみてください: #Print(名) 印刷(123)を除く: パス他を: 印刷(789)