1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SuiSuiAdvent Calendar 2023

Day 16

組み込み例外まとめ

Posted at

はじめに

前回(「例外処理を活用しよう」)紹介した例外処理(try-except)で使用可能な例外についての記事です.

例外ツリー(Python 3.12.0)

BaseException
├─ BaseExceptionGroup
├─ GeneratorExit
├─ KeyboardInterrupt
├─ SystemExit
└─ Exception
  ├─ ArithmeticError
  │ ├─ FloatingPointError
  │ ├─ OverflowError
  │ └─ ZeroDivisionError
  ├─ AssertionError
  ├─ AttributeError
  ├─ BufferError
  ├─ EOFError
  ├─ ExceptionGroup
  ├─ ImportError
  │ └─ ModuleNotFoundError
  ├─ LookupError
  │ ├─ IndexError
  │ └─ KeyError
  ├─ MemoryError
  ├─ NameError
  │ └─ UnboundLocalError
  ├─ OSError
  │ ├─ BlockingIOError
  │ ├─ ChildProcessError
  │ ├─ ConnectionError
  │ │ ├─ BrokenPipeError
  │ │ ├─ ConnectionAbortedError
  │ │ ├─ ConnectionRefusedError
  │ │ └─ ConnectionResetError
  │ ├─ FileExistsError
  │ ├─ FileNotFoundError
  │ ├─ InterruptedError
  │ ├─ IsADirectoryError
  │ ├─ NotADirectoryError
  │ ├─ PermissionError
  │ ├─ ProcessLookupError
  │ └─ TimeoutError
  ├─ ReferenceError
  ├─ RuntimeError
  │ ├─ NotImplementedError
  │ └─ RecursionError
  ├─ StopAsyncIteration
  ├─ StopIteration
  ├─ SyntaxError
  │ └─ IndentationError
  │   └─ TabError
  ├─ SystemError
  ├─ TypeError
  ├─ ValueError
  │ └─ UnicodeError
  │   ├─ UnicodeDecodeError
  │   ├─ UnicodeEncodeError
  │   └─ UnicodeTranslateError
  └─ Warning
    ├─ BytesWarning
    ├─ DeprecationWarning
    ├─ EncodingWarning
    ├─ FutureWarning
    ├─ ImportWarning
    ├─ PendingDeprecationWarning
    ├─ ResourceWarning
    ├─ RuntimeWarning
    ├─ SyntaxWarning
    ├─ UnicodeWarning
    └─ UserWarning


BaseException

全ての組み込み例外の基底クラス.


BaseExceptionGroup

excsシーケンスで例外をラップする.BaseExceptionを継承しており,どのような例外でもラップできる.


GeneratorExit

generator.close()coroutine.close() によって,ジェネレータやコルーチンが閉じられたときに送出される.


KeyboardInterrupt

ユーザが割り込みキー(Ctrl+C または Delete)を押した場合に送出される.

import time

try:
    time.sleep(10) # Ctrl+C 押下 
except KeyboardInterrupt as e:
    print(type(e), e)

# Output:
# <class 'KeyboardInterrupt'> 

SystemExit

sys.exit()exitでシステムを終了したタイミングで送出される.

import sys

try:
    sys.exit()
except SystemExit as e:
    print(type(e), e)

# Output:
# <class 'SystemExit'>

Exception

システム終了以外の全ての組み込み例外の基底クラス.システム終了以外の例外が発生した場合に送出される.


ArithmeticError

算術演算で例外が発生した場合に送出される.算術系の例外の基底クラス.


FloatingPointError

浮動小数点の演算で失敗した場合に送出される.
(3.7以降のバージョンでは使われていない)


OverflowError

算術演算の結果が表現できない大きな値になった場合に送出される.

try:
    2. ** 1024
except OverflowError as e:
    print(type(e), e)

# Output:
# <class 'OverflowError'> (34, 'Result too large')

ZeroDivisionError

除算や剰余演算でゼロ割り演算された場合に送出される.

try:
    2. / 0
except ZeroDivisionError as e:
    print(type(e), e)

# Output:
# <class 'ZeroDivisionError'> float division by zero

AssertionError

assert文が失敗した場合に送出される.

try:
    price = 100
    assert 1000 < price 
except AssertionError as e:
    print(type(e), e)

# Output:
# <class 'AssertionError'>

AttributeError

属性参照や代入が失敗した場合に送出される.

try:
    a = 10
    a.append(20)
except AttributeError as e:
    print(type(e), e)

# Output:
# <class 'AttributeError'> 'int' object has no attribute 'append'

BufferError

バッファ関連の操作が行えなかったときに送出される.


EOFError

input()が何もデータを読まずにend-of-file(EOF)に達した場合に送出される.


ExceptionGroup

excsシーケンスで例外をラップする.
ExceptionGroupはExceptionを継承しており,Exceptionのサブクラスしかラップできない.


ImportError

import文でモジュールをロードしようとして問題が発生すると送出される.


ModuleNotFoundError

ImportError のサブクラスで,import文でモジュールが見つからない場合に送出される.また,sys.modulesNone が含まれる場合にも送出される.

try:
    import mlx
except ImportError as e:
    print(type(e), e)

# Output:
# <class 'ModuleNotFoundError'> No module named 'mlx'

LookupError

マッピングまたはシーケンスで使われたキーやインデクスが無効な場合に送出される例外 IndexError および KeyError の基底クラス. codecs.lookup() によって直接送出されることもある.


IndexError

シーケンスの添字が範囲外の場合に送出される.

lst = [0, 1, 2]
try:
    print(lst[3])
except IndexError as e:
    print(type(e), e)

# Output:
# <class 'IndexError'> list index out of range

KeyError

マッピング(辞書)のキーが,既存のキーの集合内に見つからなかった場合に送出される.

dict = {'A':1, 'B':2, 'C':3}
try:
    print(dict['D'])
except KeyError as e:
    print(type(e), e)

# Output:
# <class 'KeyError'> 'D'

MemoryError

ある操作中にメモリが不足したが,オブジェクトをいくつか消去することで,その状況が復旧可能かもしれない場合に送出される.


NameError

ローカルまたはグローバルの名前が見つからなかった(存在しないオブジェクト名を指定した)場合に送出される.

try:
    print(exception)
except NameError as e:
    print(type(e), e)

# Output:
# <class 'NameError'> name 'exception' is not defined

UnboundLocalError

関数やメソッド内のローカルな変数に対して参照を行ったが,その変数には値が代入されていなかった場合に送出される.


OSError

システム関数がシステム関連のエラーを返した場合に送出される.


BlockingIOError

ノンブロッキング操作用に設定されたオブジェクトで操作がブロックされる場合に送出される.


ChildProcessError

子プロセスに対する操作が失敗した場合に送出される.


ConnectionError

コネクション関連の操作に失敗した場合に送出される.コネクション関連の例外の基底クラス.


BrokenPipeError

相手側がクローズされている間にパイプに書き込もうとした時や,書き込みのためにシャットダウンされたソケットに書き込もうとした場合に送出される.


ConnectionAbortedError

通信先の接続が中断された場合に送出される.


ConnectionRefusedError

通信先の接続が拒否された場合に送出される.


ConnectionResetError

通信先の接続がリセットされた場合に送出される.


FileExistsError

既に存在するファイルやディレクトリを作成しようとした場合に発生する.


FileNotFoundError

操作対象のファイルやディレクトリが存在しない場合に発生する.


InterruptedError

システムコールが入力信号によって中断された場合に発生する.


IsADirectoryError

ディレクトリに対してファイル操作(os.remove()など)が要求された場合に発生する.


NotADirectoryError

ディレクトリ以外にディレクトリ操作(os.listdir()など)が要求された場合に発生する.


PermissionError

ファイルシステムのパーミッションなど,アクセス権がないユーザーで操作を実行しようとした場合に発生する.


ProcessLookupError

指定したプロセスが存在しない場合に発生する.


TimeoutError

システム関数がシステムレベルでタイムアウトした場合に発生する.


ReferenceError

weakref.proxy()によって生成された弱参照プロキシを使って,ガーベジコレクションによって回収された後の参照対象オブジェクトの属性にアクセスした場合に送出される.


RuntimeError

他のカテゴリに分類できないエラーが検出された場合に送出される.


NotImplementedError

ユーザ定義の基底クラスにおいて,抽象メソッドが派生クラスでオーバライドされていない場合に発生する.


RecursionError

インタープリタが最大再帰深度(sys.getrecursionlimit())の超過を検出すると送出される.


StopAsyncIteration

非同期イテレータによる次の領域参照時(非同期イテレータの__anext__()),対象が存在しない場合に発生する.


StopIteration

組込み関数next() とイテレータの __next__() メソッドによって,そのイテレータが生成するアイテムがこれ以上ないことを伝えるために送出される.


SyntaxError

構文エラーが発生した場合に発生する.


IndentationError

正しくないインデントに関する構文エラーが発生した場合に発生する.


TabError

タブとスペースを一貫しない方法でインデントに使っているときに送出される.


SystemError

インタプリタが内部エラーを発見したが,状況は全ての望みを棄てさせるほど深刻ではないと思われる場合に送出される.


TypeError

組み込み演算または関数が適切でない型のオブジェクトに対して適用された際に送出される.


ValueError

演算子や関数が,正しい型だが適切でない値を持つ引数を受け取ったときや,IndexError のようなより詳細な例外では記述できない状況で送出される.


UnicodeError

Unicode に関するエンコードまたはデコードのエラーが発生した際に送出される.


UnicodeDecodeError

Unicode 関連のエラーがデコード中に発生した際に送出される.


UnicodeEncodeError

Unicode 関連のエラーがエンコード中に発生した際に送出される.


UnicodeTranslateError

Unicode 関連のエラーが変換中に発生した際に送出される.


Warning

警告カテゴリの基底クラス.


BytesWarning

bytesbytearray に関連した警告の基底クラス.


DeprecationWarning

廃止された機能に対する警告が発生した場合に送出される.


EncodingWarning

エンコーディングに関連した警告の基底クラス.


FutureWarning

構文内に今後(次期バージョン等で),意味やその構成が変わる予定があるものが含まれる場合に送出される.


ImportWarning

モジュールインポートの誤りが疑われる警告が発生した場合に送出される.


PendingDeprecationWarning

将来廃止される予定である機能に対する警告が発生した場合に送出される.


ResourceWarning

リソースの使用に関連した警告が発生した場合に送出される.


RuntimeWarning

曖昧なランタイム挙動に対する警告が発生した場合に送出される.


UnicodeWarning

Unicode関連の警告が発生した場合に送出される.


UserWarning

ユーザコードによって生成される警告が発生した場合に送出される.

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?