【Python】例外の種類について、まとめました~後編~

プログラム実行中に考慮しなくてはいけないことの1つに、エラーや例外の処理があります。
Pythonの例外処理は、「try」「except」などを使って行います。
「except」では、例外の種類によって処理する内容を変えることもでき、例外の内容を知っておくことは重要になってくるでしょう。
今回は、そんな例外の種類について、すでにPythonの中に備わっている第三階層のサブクラスに相当する例外について説明をしていきます。
なお、量が多いので、複数の文書にわたって記載します。(前編は、こちら:リンク
スポンサーリンク

第四階層以降

第三階層以下のサブクラスに相当する箇所の例外です。

「>」を記載している場合は、階層が深くなることを示しています。

「ArithmeticError」のサブクラス

「ArithmeticError」のサブクラスに相当する例外をまとめます。

FloatingPointError

3.7以降では、使われていない例外です。

浮動小数点演算が失敗した場合に発生していました。

OverflowError

算術演算の結果を処理・表現することができないほど大きな値になった場合に発生します。

ZeroDivisionError

除算や剰余演算で、「0」で割るような計算を行った場合に発生する例外です。

発生時は、その演算における被演算子と演算子の型を示します。

「ImportError」のサブクラス

「ImportError」のサブクラスに相当する例外をまとめます。

ModuleNotFoundError

以下のいずれかの条件を満たす際に発生する例外です。

  • 「import 文で指定したモジュール」が見つからない場合
  • 「sys.modules」 に None が含まれる場合

「LookupError」のサブクラス

「LookupError」のサブクラスに相当する例外をまとめます。

IndexError

シーケンスの添字が範囲外の場合に発生する例外です。

なお、Indexが整数でない場合は、 TypeError となります。

KeyError

辞書(マッピング)のキーが、見つからなかった場合に発生する例外です。

「NameError」のサブクラス

「NameError」のサブクラスに相当する例外をまとめます。

UnboundLocalError

関数やメソッド内のローカルな変数を参照した場合に、変数が空だった(値が代入されていない)場合に発生する例外です。

「OSError」のサブクラス

「OSError」のサブクラスに相当する例外をまとめます。

なお、説明で使用している「errno」については、前編の「OSError」を(リンク)を参照ください。

BlockingIOError

ソケットなどのオブジェクトがブロッキングされない操作用として設定されている状態で、操作がブロックされる場合に発生する例外です。

「errno」の「EAGAIN」「EALREADY」「EWOULDBLOCK」「EINPROGRESS」に対応しています。

なお、「BlockingIOError」では、「OSError」の属性の他に以下の属性を持ちます。

属性説明
characters_writtenストリームがブロックされるまでに書き込まれた文字数を含む整数です。
「io」からのバッファ「I/Oクラス」を使っているときに利用できます。

ChildProcessError

子となるプロセスでの操作が失敗した場合に発生する例外です。

「errno」の「ECHILD」に対応しています。

ConnectionError

「BrokenPipeError」「ConnectionAbortedError」「ConnectionRefusedError」「ConnectionResetError」の基底クラスになっています。

コネクションに関わるエラーがまとまっています。

ConnectionError > BrokenPipeError

以下のいずれかの操作を行った場合に発生する例外です。

  • パイプのもう一方の端が閉じられた状態で書き込みを試みる。
  • 書き込み用にシャットダウンされたソケットに書き込みを試みる。

「errno」の「EPIPE」「ESHUTDOWN」に対応しています。

ConnectionError > ConnectionAbortedError

接続先によって接続試行が中断された場合に発生する例外です。

「errno」の「ECONNABORTED」に対応しています。

ConnectionError > ConnectionRefusedError

接続先によって接続試行が拒否された場合に発生する例外です。

「errno」の「ECONNREFUSED」に対応しています。

ConnectionError > ConnectionResetError

接続先によって接続がリセットされた場合に発生する例外です。

「errno」の「ECONNRESET」に対応しています。

FileExistsError

ファイルまたはディレクトリを作成しようとした際に、すでに存在している場合に発生する例外です。

「errno」の「EEXIST」に対応しています。

FileNotFoundError

 要求されたファイルまたはディレクトリが見つからない場合に発生する例外です。

「errno」の「ENOENT」に対応しています。

InterruptedError

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

「errno」の「EINTR」に対応しています。

IsADirectoryError

ディレクトリに対して、ファイル操作が要求された場合に発生する例外です。

「errno」の「EISDIR」に対応しています。

NotADirectoryError

ディレクトリではないものに対して、ディレクトリ操作が要求された場合に発生する例外です。

「errno」の「ENOTDIR」に対応しています。

PermissionError

権限がない操作を実行しようとした場合に発生する例外です。

「errno」の「EACCES」「EPERM」に対応しています。

ProcessLookupError

指定されたプロセスが存在しない場合に発生する例外でです。

「errno」の「ESRCH」に対応しています。

TimeoutError

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

「errno」の「ETIMEDOUT」に対応しています。

スポンサーリンク

「RuntimeError」のサブクラス

「RuntimeError」のサブクラスに相当する例外をまとめます。

NotImplementedError

ユーザが定義した基底クラスにおいて、抽象メソッドが派生クラスでオーバライドされることを要求する場合に、発生させなければならない例外です。

もしくは、実装が必要なことを示しています。

演算子やメソッドがサポートされていないことを示す場合は、「未定義のまま」もしくは「Noneを設定(サブクラスの場合)」を行うのが良いです。

RecursionError

インタープリタが再帰深度の限界を超えた場合に発生する例外です。

バージョン 3.4以前では、RuntimeErrorとして扱っていたようです。

「SyntaxError」のサブクラス

「SyntaxError」のサブクラスに相当する例外をまとめます。

IndentationError

「TabError」の基底クラスになっています。

IndentationError > TabError

「IndentationError」のサブクラスに相当します。

正しく用いられていない「タブ」「スペース」がある場合に発生する例外です。

「ValueError」のサブクラス

「ValueError」のサブクラスに相当する例外をまとめます。

UnicodeError

「UnicodeEncodeError」「UnicodeDecodeError」「UnicodeTranslateError」の基底クラスになっています。

Unicodeに関するエンコードまたはデコードのエラーが発生した場合に、発生する例外がまとまっています。

UnicodeErrorはエンコードまたはデコードのエラーに関する情報を属性として持っています。(下表を参照)

属性説明
encodingエラーを送出したエンコーディングの名称です。
reasonエラー内容を説明する文字列です。
objectエンコードまたはデコードしようとしたobjectです。
startobject の最初の無効なデータのIndexです。
endobject の最後の無効なデータの次のIndexです。

UnicodeError > UnicodeEncodeError

Unicode関連のエラーがエンコード中に発生した場合に発生する例外です。

UnicodeError > UnicodeDecodeError

Unicode関連のエラーがデコード中に発生した場合に発生する例外です。

UnicodeError > UnicodeTranslateError

Unicode関連のエラーが変換中に発生した場合に発生する例外です。

「Warning」のサブクラス

「Warning」のサブクラスに相当する例外をまとめます。

DeprecationWarning

他のPython開発者へ向けて、使用を推奨しない機能についての警告の基底クラスです。

本警告を採用する例としては、「今後廃止することが決まっている機能」があります。

PendingDeprecationWarning

他のPython開発者へ向けて、使用を推奨しない機能についての警告の基底クラスです。

本警告を採用する例としては、「廃止するだろうけど、廃止を決定していない機能」があります。

よほどの明記しなければならない理由がない限り使われることはないでしょう。

基本的には廃止を決定した後に、「DeprecationWarning」が使わらることがほとんどです。

RuntimeWarning

あいまいなランタイム挙動に対する警告の基底クラスです。

SyntaxWarning

曖昧な構文に対する警告の基底クラスです。

UserWarning

ユーザコードによって生成される警告の基底クラスです。

FutureWarning

エンドユーザーへ向けた「廃止予定の機能」についての警告の基底クラスです。

ImportWarning

モジュールインポートの誤りと思われるものに対する警告の基底クラスです。

UnicodeWarning

Unicode に関連した警告の基底クラスです。

BytesWarning

bytes や bytearray に関連した警告の基底クラスです。

EncodingWarning

エンコーディングに関連する警告に対する基底クラスです。

ResourceWarning

リソースの使用に関連した警告の基底クラスです。

まとめ

今回は、Pythonに存在する例外の一部について記載しました。

try-except文による例外処理などで利用する機会もあると思います。

ぜひ、参考にしてみて下さい。

スポンサーリンク