組み込み例外まとめ

## はじめに
前回（[「例外処理を活用しよう」](https://qiita.com/suipy/items/9d02e197df813f3c2fab)）紹介した例外処理（```try-except```）で使用可能な例外についての記事です．

## 例外ツリー（Python 3.12.0）

[BaseException](#baseexception)
├─ [BaseExceptionGroup](#baseexceptiongroup)
├─ [GeneratorExit](#generatorexit)
├─ [KeyboardInterrupt](#keyboardinterrupt)
├─ [SystemExit](#systemexit)
└─ [Exception](#exception)
　　├─ [ArithmeticError](#arithmeticerror)
　　│　├─ [FloatingPointError](#floatingpointerror)
　　│　├─ [OverflowError](#overflowerror)
　　│　└─ [ZeroDivisionError](#zerodivisionerror)
　　├─ [AssertionError](#assertionerror)
　　├─ [AttributeError](#attributeerror)
　　├─ [BufferError](#buffererror)
　　├─ [EOFError](#eoferror)
　　├─ [ExceptionGroup](#exceptiongroup)
　　├─ [ImportError](#importerror)
　　│　└─ [ModuleNotFoundError](#modulenotfounderror)
　　├─ [LookupError](#lookuperror)
　　│　├─ [IndexError](#indexerror)
　　│　└─ [KeyError](#keyerror)
　　├─ [MemoryError](#memoryerror)
　　├─ [NameError](#nameerror)
　　│　└─ [UnboundLocalError](#unboundlocalerror)
　　├─ [OSError](#oserror)
　　│　├─ [BlockingIOError](#blockingioerror)
　　│　├─ [ChildProcessError](#childprocesserror)
　　│　├─ [ConnectionError](#connectionerror)
　　│　│　├─ [BrokenPipeError](#brokenpipeerror)
　　│　│　├─ [ConnectionAbortedError](#connectionabortederror)
　　│　│　├─ [ConnectionRefusedError](#connectionrefusederror)
　　│　│　└─ [ConnectionResetError](#connectionreseterror)
　　│　├─ [FileExistsError](#fileexistserror)
　　│　├─ [FileNotFoundError](#filenotfounderror)
　　│　├─ [InterruptedError](#interruptederror)
　　│　├─ [IsADirectoryError](#isadirectoryerror)
　　│　├─ [NotADirectoryError](#notadirectoryerror)
　　│　├─ [PermissionError](#permissionerror)
　　│　├─ [ProcessLookupError](#processlookuperror)
　　│　└─ [TimeoutError](#timeouterror)
　　├─ [ReferenceError](#referenceerror)
　　├─ [RuntimeError](#runtimeerror)
　　│　├─ [NotImplementedError](#notimplementederror)
　　│　└─ [RecursionError](#recursionerror)
　　├─ [StopAsyncIteration](#stopasynciteration)
　　├─ [StopIteration](#stopiteration)
　　├─ [SyntaxError](#syntaxerror)
　　│　└─ [IndentationError](#indentationerror)
　　│　　　└─ [TabError](#taberror)
　　├─ [SystemError](#systemerror)
　　├─ [TypeError](#typeerror)
　　├─ [ValueError](#valueerror)
　　│　└─ [UnicodeError](#unicodeerror)
　　│　　　├─ [UnicodeDecodeError](#unicodedecodeerror)
　　│　　　├─ [UnicodeEncodeError](#unicodeencodeerror)
　　│　　　└─ [UnicodeTranslateError](#unicodetranslateerror)
　　└─ [Warning](#warning)
　　　　├─ [BytesWarning](#byteswarning)
　　　　├─ [DeprecationWarning](#deprecationwarning)
　　　　├─ [EncodingWarning](#encodingwarning)
　　　　├─ [FutureWarning](#futurewarning)
　　　　├─ [ImportWarning](#importwarning)
　　　　├─ [PendingDeprecationWarning](#pendingdeprecationwarning)
　　　　├─ [ResourceWarning](#resourcewarning)
　　　　├─ [RuntimeWarning](#runtimewarning)
　　　　├─ [SyntaxWarning](#syntaxwarning)
　　　　├─ [UnicodeWarning](#unicodewarning)
　　　　└─ [UserWarning](#userwarning)

---
### BaseException
全ての組み込み例外の基底クラス．

---
### BaseExceptionGroup
```excs```シーケンスで例外をラップする．BaseExceptionを継承しており，どのような例外でもラップできる．

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

---
### KeyboardInterrupt
ユーザが割り込みキー（Ctrl+C または Delete）を押した場合に送出される．
```python
import time

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

# Output:
# <class 'KeyboardInterrupt'> 
```

---
### SystemExit
```sys.exit()```や```exit```でシステムを終了したタイミングで送出される．
```python
import sys

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

# Output:
# <class 'SystemExit'>
```

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

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

---
### FloatingPointError
浮動小数点の演算で失敗した場合に送出される．
**<ins>（3.7以降のバージョンでは使われていない）</ins>**

---
### OverflowError
算術演算の結果が表現できない大きな値になった場合に送出される．
```python
try:
    2. ** 1024
except OverflowError as e:
    print(type(e), e)

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

---
### ZeroDivisionError
除算や剰余演算でゼロ割り演算された場合に送出される．
```python
try:
    2. / 0
except ZeroDivisionError as e:
    print(type(e), e)

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

---
### AssertionError
```assert```文が失敗した場合に送出される．
```python
try:
    price = 100
    assert 1000 < price 
except AssertionError as e:
    print(type(e), e)

# Output:
# <class 'AssertionError'>
```

---
### AttributeError
属性参照や代入が失敗した場合に送出される．
```python
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](#importerror) のサブクラスで，```import```文でモジュールが見つからない場合に送出される．また，```sys.modules``` に ```None``` が含まれる場合にも送出される．
```python
try:
    import mlx
except ImportError as e:
    print(type(e), e)

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

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

---
### IndexError
シーケンスの添字が範囲外の場合に送出される．
```python
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
マッピング(辞書)のキーが，既存のキーの集合内に見つからなかった場合に送出される．
```python
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
ローカルまたはグローバルの名前が見つからなかった（存在しないオブジェクト名を指定した）場合に送出される．
```python
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](#indexerror) のようなより詳細な例外では記述できない状況で送出される．

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

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

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

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

---
### Warning
警告カテゴリの基底クラス．

---
### BytesWarning
```bytes``` や ```bytearray``` に関連した警告の基底クラス．

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

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

---
### FutureWarning
構文内に今後（次期バージョン等で），意味やその構成が変わる予定があるものが含まれる場合に送出される．

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

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

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

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

---
### UnicodeWarning
Unicode関連の警告が発生した場合に送出される．

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