Python異常
例外は、プログラムの実行中に発生し、プログラムの正常な実行に影響を与えるイベントです.一般的にPythonがプログラムを正常に処理できない場合に異常が発生します.例外はPythonオブジェクトで、エラーを表します.Pythonスクリプトに異常が発生した場合、処理をキャプチャする必要があります.そうしないと、プログラムは実行を終了します.
例外処理
Pythonでのスナップ例外はtry/except文を使用できます.try/except文は、try文ブロック内のエラーを検出し、except文に異常情報をキャプチャして処理させるために使用されます.異常が発生したときにプログラムを終了したくない場合は、tryでそれをキャプチャするだけです.基本構文は次のとおりです.
pythonの標準例外クラスには、次のリストがあります.
BaseException
すべての例外のベースクラス
SystemExit
インタプリタ要求終了
KeyboardInterrupt
ユーザ割込み実行
Exception
一般的なエラーのベースクラス
StopIteration
反復器にはこれ以上の値はありません
GeneratorExit
ジェネレータに異常が発生し、終了を通知
StandardError
すべての組み込み標準異常のベースクラス
ArithmeticError
すべての数値計算エラーのベースクラス
FloatingPointError
浮動小数点計算エラー
OverflowError
最大限度を超える数値演算
ZeroDivisionError
ゼロを除く(または型を取る)(すべてのデータ型)
AssertionError
アサーション文が失敗しました
AttributeError
オブジェクトにはこの属性がありません
EOFError
組み込み入力なしでEOFタグに到達
EnvironmentError
OSエラーのベースクラス
IOError
入出力操作に失敗しました
OSError
OSエラー
WindowsError
システム呼び出しに失敗しました
ImportError
モジュール/オブジェクトのインポートに失敗しました
LookupError
無効なデータ・クエリーのベース・クラス
IndexError
シーケンスにこのインデックスはありません(index)
KeyError
マッピングにこのキーはありません
MemoryError
メモリオーバーフローエラー(Pythonインタプリタでは致命的ではありません)
NameError
オブジェクトが宣言/初期化されていません(属性なし)
UnboundLocalError
初期化されていないローカル変数へのアクセス
ReferenceError
弱参照(Weak reference)は、ゴミ回収されたオブジェクトにアクセスしようとします.
RuntimeError
一般的なランタイムエラー
NotImplementedError
まだ実現されていない方法
SyntaxError
Python構文エラー
IndentationError
インデントエラー
TabError
Tabとスペースの混在
SystemError
一般的な解釈システムエラー
TypeError
タイプに無効なアクション
ValueError
無効なパラメータが入力されました
UnicodeError
Unicode関連エラー
UnicodeDecodeError
Unicode復号時のエラー
UnicodeEncodeError
Unicode符号化時エラー
UnicodeTranslateError
Unicode変換時エラー
Warning
警告ベースクラス
DeprecationWarning
廃棄されたフィーチャーに関する警告
FutureWarning
将来的に意味が変わるという警告について
OverflowWarning
古いオートリフト長型(long)に関する警告
PendingDeprecationWarning
特性が廃棄される警告について
RuntimeWarning
不審なランタイム挙動(runtime behavior)の警告
SyntaxWarning
不審な文法の警告
UserWarning
ユーザーコード生成の警告
次に例を示します.
上記プログラムのIOErrorは、ファイル操作の入力出力に失敗した異常クラスであり、異常が投げ出されていないことがわかる、異常実行を示すため、ここでfile.txtファイルは読み取り専用に設定され、次のプログラムの結果は次のとおりです.
これにより、tryが異常を取得した後にexcept文をマッチングし、マッチングに成功した後に異常処理が終了し、異常が発生しなければelse文をマッチングし、プログラムが終了する異常処理のメカニズムが明らかになった.ただし、プログラムが例外finally文を投げ出すかどうかにかかわらず、常に実行されます.
tryの動作原理は、try文を開始すると、pythonが現在のプログラムのコンテキストにマークされ、異常が発生した場合にここに戻ることができ、try句が先に実行され、次に実行に依存して異常が発生するかどうかを決定することです.
(1)try後の文が実行されたときに異常が発生した場合、pythonはtryに戻り、その異常に一致する最初のexcept句を実行し、異常処理が完了すると、制御フローはtry文全体を通過する(異常が処理されたときに新しい異常が発生しない限り).
(2)try後の文に異常が発生したのに一致するexcept句がない場合、異常は上位のtryに渡されるか、プログラムの最上位に渡される(これによりプログラムが終了し、デフォルトのエラー情報が印刷される).
(3)try句の実行中に異常が発生しなかった場合、pythonはelse文の後の文(elseがある場合)を実行し、try文全体を制御する.
トリガ異常
Pythonではraise文を使用して異常をトリガーできます.構文フォーマットは次のとおりです.
最初のパラメータは、Exceptionが例外クラス、または例外クラスのインスタンスである必要があります.
2番目のパラメータは、Exceptionに渡されるパラメータで、メタグループである必要があります.このパラメータはこの異常に関する有用な情報を伝達するために使用される.
3番目のパラメータtracebackはあまり使われず、主にフォロー中の記録オブジェクトを提供するために使用されます.
文のExceptionは例外のタイプ(たとえば、NameError)パラメータは例外パラメータ値です.このパラメータはオプションで、指定しない場合は例外パラメータはNoneです.最後のパラメータはオプションで、存在する場合は例外オブジェクトを追跡します.ここでは、上記の例を使用して、次のようになります.
raiseから例外が投げ出されると,次のコードは実行されていないことがわかり,例外が投げ出されるとプログラムは直接実行を終了する.
例外処理
Pythonでのスナップ例外はtry/except文を使用できます.try/except文は、try文ブロック内のエラーを検出し、except文に異常情報をキャプチャして処理させるために使用されます.異常が発生したときにプログラムを終了したくない場合は、tryでそれをキャプチャするだけです.基本構文は次のとおりです.
try:
#
except :
# try
except ,:
# ,
else:
#
finally:
#
pythonの標準例外クラスには、次のリストがあります.
BaseException
すべての例外のベースクラス
SystemExit
インタプリタ要求終了
KeyboardInterrupt
ユーザ割込み実行
Exception
一般的なエラーのベースクラス
StopIteration
反復器にはこれ以上の値はありません
GeneratorExit
ジェネレータに異常が発生し、終了を通知
StandardError
すべての組み込み標準異常のベースクラス
ArithmeticError
すべての数値計算エラーのベースクラス
FloatingPointError
浮動小数点計算エラー
OverflowError
最大限度を超える数値演算
ZeroDivisionError
ゼロを除く(または型を取る)(すべてのデータ型)
AssertionError
アサーション文が失敗しました
AttributeError
オブジェクトにはこの属性がありません
EOFError
組み込み入力なしでEOFタグに到達
EnvironmentError
OSエラーのベースクラス
IOError
入出力操作に失敗しました
OSError
OSエラー
WindowsError
システム呼び出しに失敗しました
ImportError
モジュール/オブジェクトのインポートに失敗しました
LookupError
無効なデータ・クエリーのベース・クラス
IndexError
シーケンスにこのインデックスはありません(index)
KeyError
マッピングにこのキーはありません
MemoryError
メモリオーバーフローエラー(Pythonインタプリタでは致命的ではありません)
NameError
オブジェクトが宣言/初期化されていません(属性なし)
UnboundLocalError
初期化されていないローカル変数へのアクセス
ReferenceError
弱参照(Weak reference)は、ゴミ回収されたオブジェクトにアクセスしようとします.
RuntimeError
一般的なランタイムエラー
NotImplementedError
まだ実現されていない方法
SyntaxError
Python構文エラー
IndentationError
インデントエラー
TabError
Tabとスペースの混在
SystemError
一般的な解釈システムエラー
TypeError
タイプに無効なアクション
ValueError
無効なパラメータが入力されました
UnicodeError
Unicode関連エラー
UnicodeDecodeError
Unicode復号時のエラー
UnicodeEncodeError
Unicode符号化時エラー
UnicodeTranslateError
Unicode変換時エラー
Warning
警告ベースクラス
DeprecationWarning
廃棄されたフィーチャーに関する警告
FutureWarning
将来的に意味が変わるという警告について
OverflowWarning
古いオートリフト長型(long)に関する警告
PendingDeprecationWarning
特性が廃棄される警告について
RuntimeWarning
不審なランタイム挙動(runtime behavior)の警告
SyntaxWarning
不審な文法の警告
UserWarning
ユーザーコード生成の警告
次に例を示します.
import codecs
try:
with codecs.open('file.txt', 'w') as fh:
fh.write("This is a test file for testing exceptions!")
except IOError as err:
print 'ERROR: Failed to find file or read file'
else:
print 'Write content successful'
finally:
print 'Program end'
:
Write content successful
Program end
上記プログラムのIOErrorは、ファイル操作の入力出力に失敗した異常クラスであり、異常が投げ出されていないことがわかる、異常実行を示すため、ここでfile.txtファイルは読み取り専用に設定され、次のプログラムの結果は次のとおりです.
:
ERROR: Failed to find file or read file
Program end
これにより、tryが異常を取得した後にexcept文をマッチングし、マッチングに成功した後に異常処理が終了し、異常が発生しなければelse文をマッチングし、プログラムが終了する異常処理のメカニズムが明らかになった.ただし、プログラムが例外finally文を投げ出すかどうかにかかわらず、常に実行されます.
tryの動作原理は、try文を開始すると、pythonが現在のプログラムのコンテキストにマークされ、異常が発生した場合にここに戻ることができ、try句が先に実行され、次に実行に依存して異常が発生するかどうかを決定することです.
(1)try後の文が実行されたときに異常が発生した場合、pythonはtryに戻り、その異常に一致する最初のexcept句を実行し、異常処理が完了すると、制御フローはtry文全体を通過する(異常が処理されたときに新しい異常が発生しない限り).
(2)try後の文に異常が発生したのに一致するexcept句がない場合、異常は上位のtryに渡されるか、プログラムの最上位に渡される(これによりプログラムが終了し、デフォルトのエラー情報が印刷される).
(3)try句の実行中に異常が発生しなかった場合、pythonはelse文の後の文(elseがある場合)を実行し、try文全体を制御する.
トリガ異常
Pythonではraise文を使用して異常をトリガーできます.構文フォーマットは次のとおりです.
raise [Exception [, args [, traceback]]]
最初のパラメータは、Exceptionが例外クラス、または例外クラスのインスタンスである必要があります.
2番目のパラメータは、Exceptionに渡されるパラメータで、メタグループである必要があります.このパラメータはこの異常に関する有用な情報を伝達するために使用される.
3番目のパラメータtracebackはあまり使われず、主にフォロー中の記録オブジェクトを提供するために使用されます.
文のExceptionは例外のタイプ(たとえば、NameError)パラメータは例外パラメータ値です.このパラメータはオプションで、指定しない場合は例外パラメータはNoneです.最後のパラメータはオプションで、存在する場合は例外オブジェクトを追跡します.ここでは、上記の例を使用して、次のようになります.
import codecs
try:
with codecs.open('file.txt', 'w') as fh:
fh.write("This is a test file for testing exceptions!")
except IOError as err:
raise err
print 'ERROR: Failed to find file or read file'
else:
print 'Write content successful'
finally:
print 'Program end'
:
Traceback (most recent call last):
Program end
File "C:/Users/YangQing/PycharmProjects/Test/except.py", line 11, in
raise err
IOError: [Errno 13] Permission denied: 'file.txt'
raiseから例外が投げ出されると,次のコードは実行されていないことがわかり,例外が投げ出されるとプログラムは直接実行を終了する.