Pythonの例外とは、プログラムの実行中に発生するエラーを表すオブジェクトです。例外が発生すると、プログラムの通常の流れが中断され、例外が発生した行以降のコードは実行されません。
Pythonでは、例外を発生させるにはraise文を使います。例外を処理するには、try文とexcept文を使います。try文は、例外が発生しうるコードを実行するブロックです。except文は、特定の例外が発生したときに実行するブロックです。
Pythonには様々な種類の組み込み例外があります。例えば、ZeroDivisionErrorは0で割り算をしたときに発生する例外です。ユーザー定義の例外も作成できますが、その場合はExceptionクラスから派生させる必要があります。
Pythonで例外を発生させると処理するサンプルコード
# 0で割り算をする関数
def divide(x, y):
return x / y
# 例外を発生させる
try:
result = divide(10, 0) # ZeroDivisionErrorが発生する
except ZeroDivisionError as e: # ZeroDivisionErrorをキャッチする
print("0で割り算はできません") # エラーメッセージを表示する
print(e) # 例外オブジェクトを表示する
else:
print(result) # 例外が発生しなかった場合に結果を表示する
finally:
print("終了") # 例外の有無に関わらず最後に実行する
組み込み例外の一覧
Pythonには、様々な種類の組み込み例外があります。組み込み例外は、BaseExceptionクラスから派生したクラスです。組み込み例外の一覧は、以下のようになります。
- BaseException: すべての例外の基底クラス
- Exception: すべての組み込み非システム終了例外の基底クラス
- ArithmeticError: 算術エラーに関する例外の基底クラス
- BufferError: バッファ関連の操作に失敗したときに発生する例外
- LookupError: シーケンスやマッピングに関するエラーに関する例外の基底クラス
- AssertionError: assert文が失敗したときに発生する例外
- AttributeError: 属性参照や代入が失敗したときに発生する例外
- EOFError: 入力が予期せず終了したときに発生する例外
- FloatingPointError: 浮動小数点演算が失敗したときに発生する例外
- GeneratorExit: ジェネレータが閉じられたときに発生する例外
- ImportError: インポートが失敗したときに発生する例外
- ModuleNotFoundError: モジュールが見つからなかったときに発生する例外
- IndexError: シーケンスのインデックスが範囲外だったときに発生する例外
- KeyError: マッピングのキーが存在しなかったときに発生する例外
- KeyboardInterrupt: ユーザーが割り込みキーを押したときに発生する例外
- MemoryError: メモリ不足が起こったときに発生する例外
- NameError: 名前が見つからなかったときに発生する例外
- NotImplementedError: 抽象メソッドが実装されていないときに発生する例外
- OSError: オペレーティングシステム関連のエラーに関する例外の基底クラス
- OverflowError: 算術演算の結果が表現できる範囲を超えたときに発生する例外
- RecursionError: 最大再帰深度を超えたときに発生する例外
- ReferenceError: 弱参照オブジェクトが存在しないオブジェクトを参照しようとしたときに発生する例外
- RuntimeError: その他の実行時エラーに関する例外の基底クラス
- StopIteration: イテレータが要素を返せないときに発生する例外
- StopAsyncIteration: 非同期イテレータが要素を返せないときに発生する例外
- SyntaxError: 構文エラーに関する例外の基底クラス
- IndentationError: インデントエラーに関する例外の基底クラス
- TabError: インデントにタブ文字と空白文字を混在させたときに発生する例外
- SystemError: インタプリタが内部エラーに遭遇したときに発生する例外
- SystemExit: sys.exit()関数が呼び出されたときに発生する例外
- TypeError: 型が不適切な操作や関数が適用されたときに発生する例外
- UnboundLocalError: ローカル変数が参照されたが値が代入されていないときに発生する例外
- UnicodeError: Unicode関連のエラーに関する例外の基底クラス
- UnicodeEncodeError: Unicode文字列をエンコードしようとしたときにエラーが発生した場合の例外
- UnicodeDecodeError: バイト列をデコードしようとしたときにエラーが発生した場合の例外
- UnicodeTranslateError: Unicode文字列を変換しようとしたときにエラーが発生した場合の例外
- ValueError: 値が不適切な操作や関数が適用されたときに発生する例外
- ZeroDivisionError: 0で除算や剰余演算を行ったときに発生する例外