組み込み例外
************

Python において、すべての例外は "BaseException" から派生したクラスのイ
ンスタンスでなければなりません。特定のクラスを言及する "except" 節を伴
う "try" 文において、その節はそのクラスから派生した例外クラスも処理し
ますが、そのクラスの派生 *元* の例外クラスは処理しません。サブクラス化
の関係にない 2 つの例外クラスは、それらが同じ名前だった場合でも等しく
なりえません。

この章で挙げる組み込み例外は、インタプリタや組み込み関数によって生成さ
れます。特に注記しないかぎり、これらはエラーの詳しい原因を示す "関連値
(associated value)" を持ちます。この値は、複数の情報 (エラーコードや、
そのコードを説明する文字列など) の文字列かタプルです。関連値は通常、例
外クラスのコンストラクタに引数として渡されます。

ユーザによるコードも組み込み例外を送出できます。これを使って、例外ハン
ドラをテストしたり、インタプリタが同じ例外を送出する状況と "ちょうど同
じような" エラー条件であることを報告したりできます。しかし、ユーザのコ
ードが適切でないエラーを送出するのを妨げる方法はないので注意してくださ
い。

組み込み例外クラスは新たな例外を定義するためにサブクラス化することがで
きます。新しい例外は、"Exception" クラスかそのサブクラスの一つから派生
することをお勧めします。 "BaseException" からは派生しないで下さい。例
外を定義する上での詳しい情報は、 Python チュートリアルの ユーザー定義
例外 の項目にあります。


例外コンテキスト
================

例外オブジェクトの3つの属性は、例外が送出された状況に関する情報を提供
します:

BaseException.__context__
BaseException.__cause__
BaseException.__suppress_context__

   別の例外の処理中に新しい例外を送出すると、新しい例外の
   "__context__" 属性には、処理中の例外が自動的に設定されます。 例外の
   処理は、"except" 節、"finally" 節、"with" 文を使うときに行われるこ
   とがあります。

   "raise" とともに "from" を使うと、この暗黙の例外コンテキストに明示
   的な原因を付け加えられます。

      raise new_exc from original_exc

   "from" に続く式は、例外か "None" でなければなりません。 送出される
   例外の "__cause__" には、その値が設定されます。 "__cause__" を設定
   すると、"__suppress_context__" 属性も暗黙的に "True" に設定されます
   。 そのため、"raise new_exc from None" を使うと、表示上は古い例外を
   新しい例外で置き換えられます (例えば "KeyError" から
   "AttributeError" への変換)。 古い例外はデバッグ時に調べられるよう
   "__context__" に残ります。

   デフォルトの traceback 表示コードは、例外自体の traceback に加え、
   これらの連鎖された例外を表示します。"__cause__" で明示的に連鎖させ
   た例外は、存在するならば常に表示されます。"__context__" で暗黙に連
   鎖させた例外は、"__cause__" が "None" かつ "__suppress_context__"
   が false の場合にのみ表示されます。

   いずれにせよ、連鎖された例外に続いて、その例外自体は常に表示されま
   す。そのため、traceback の最終行には、常に送出された最後の例外が表
   示されます。


組み込み例外から継承する
========================

ユーザコードでは、例外型を継承したサブクラスを作成できます。 基底クラ
ス間で "args" 属性の扱いが衝突したり、メモリレイアウトの互換性に問題が
生じたりする可能性があるため、 一度に継承する例外型は一つだけにするこ
とを推奨します。

ほとんどの組み込み例外は効率のために C で実装されています
(Objects/exceptions.c を参照してください)。 一部の例外は独自のメモリレ
イアウトを持つため、そうした例外型の組み合わせでは多重継承できません。
型のメモリレイアウトは実装の詳細であり、Python のバージョンによって変
わり、将来新たな衝突が生じる可能性があります。 そのため、複数の例外型
からの継承は避けることを推奨します。


基底クラス
==========

以下の例外は、主に他の例外の基底クラスとして使われます。

exception BaseException

   全ての組み込み例外の基底クラスです。ユーザ定義の例外に直接継承され
   ることは意図されていません (継承には "Exception" を使ってください)
   。このクラスのインスタンスに "str()" が呼ばれた場合、インスタンスへ
   の引数の表現か、引数が無い場合には空文字列が返されます。

   args

      例外コンストラクタに与えられた引数のタプルです。組み込み例外は普
      通、エラーメッセージを与える一つの文字列だけを引数として呼ばれま
      すが、中には ("OSError" など) いくつかの引数を必要とし、このタプ
      ルの要素に特別な意味を込めるものもあります。

   with_traceback(tb)

      このメソッドは、例外の新しいトレースバックに *tb* を設定し、その
      例外オブジェクトを返します。 **PEP 3134** の例外連鎖機能が使える
      ようになる前は、より広く使われていました。 次の例は、トレースバ
      ックを保持しながら "SomeException" のインスタンスを
      "OtherException" のインスタンスに変換する方法を示します。
      "OtherException" を送出すると、そのトレースバックに現在のフレー
      ムが追加されます。 元の "SomeException" を呼び出し元に伝播させた
      場合にも、そのトレースバックに同じようにフレームが追加されます。

         try:
             ...
         except SomeException:
             tb = sys.exception().__traceback__
             raise OtherException(...).with_traceback(tb)

   __traceback__

      この例外に関連付けられた トレースバックオブジェクト を保持する、
      書き込み可能なフィールドです。 raise 文 も参照してください。

   add_note(note)

      例外のノートとして文字列 "note" を追加します。ノートは標準のトレ
      ースバックで例外文字列の後に表示されます。"note" が文字列以外の
      場合 "TypeError" が送出されます。

      Added in version 3.11.

   __notes__

      "add_note()" で追加された例外のノートのリスト。この属性は
      "add_note()" を呼び出すと生成されます。

      Added in version 3.11.

exception Exception

   システム終了以外の全ての組み込み例外はこのクラスから派生しています
   。全てのユーザ定義例外もこのクラスから派生させるべきです。

exception ArithmeticError

   算術上の様々なエラーに対して送出される組み込み例外 "OverflowError",
   "ZeroDivisionError", "FloatingPointError" の基底クラスです。

exception BufferError

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

exception LookupError

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


具象例外
========

以下の例外は、通常送出される例外です。

exception AssertionError

   "assert" 文が失敗した場合に送出されます。

exception AttributeError

   属性参照 (属性参照 を参照) や代入が失敗した場合に送出されます (オブ
   ジェクトが属性の参照や属性の代入をまったくサポートしていない場合に
   は "TypeError" が送出されます)。

   オプションのキーワード専用引数 *name* と *obj* は、対応する属性に値
   を設定します:

   name

      アクセスしようとした属性の名前。

   obj

      指定した名前の属性にアクセスしようとした対象のオブジェクト。

   バージョン 3.10 で変更: "name" および "obj" 属性が追加されました。

exception EOFError

   "input()" 関数がデータを何も読み込まずにファイル終端 (EOF) に達した
   場合に送出されます。 (注: "io.TextIOBase.read()" メソッドと
   "io.IOBase.readline()" メソッドは、EOF に達すると空文字列を返します
   。)

exception FloatingPointError

   現在は使われていません。

exception GeneratorExit

   *ジェネレータ* や *コルーチン* が閉じられたときに送出されます。
   "generator.close()" と "coroutine.close()" を参照してください。この
   例外は厳密に言えばエラーではないので、 "Exception" ではなく
   "BaseException" を直接継承しています。

exception ImportError

   "import" 文でモジュールをロードしようとして問題が発生すると送出され
   ます。 "from ... import" の "from list" に、見つからない名前が含ま
   れている場合にも送出されます。

   オブションのキーワード専用引数  *name* と *path* は、対応する属性に
   設定されます:

   name

      インポートを試みたモジュールの名前。

   path

      例外を引き起こしたファイルのパス。

   バージョン 3.3 で変更: "name" および "path" 属性が追加されました。

exception ModuleNotFoundError

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

   Added in version 3.6.

exception ImportCycleError

   "ImportError" のサブクラスで、遅延インポートが自身を直接または間接
   的にインポートしようとして失敗した場合に送出されます。

   Added in version 3.15.

exception IndexError

   シーケンスの添字が範囲外の場合に送出されます。 (スライスのインデク
   スはシーケンスの範囲に収まるように暗黙のうちに調整されます; インデ
   クスが整数でない場合、 "TypeError" が送出されます。)

exception KeyError

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

exception KeyboardInterrupt

   ユーザが割り込みキー (通常は "Control"-"C" または "Delete") を押し
   た場合に送出されます。実行中、割り込みは定期的に監視されます。
   "Exception" を捕捉するコードに誤って捕捉されてインタプリタの終了が
   阻害されないように、この例外は "BaseException" を継承しています。

   注釈:

     "KeyboardInterrupt" の捕捉には特別な配慮が必要です。 この例外は予
     測できない箇所で送出される可能性があるため、状況によっては、実行
     中のプログラムが不整合な状態になることがあります。 一般には、
     "KeyboardInterrupt" によってできるだけ速やかにプログラムを終了さ
     せるか、 この例外の送出自体を避けるのが最善です (シグナルハンドラ
     ーと例外についての注意 を参照してください)。

exception MemoryError

   ある操作中にメモリが不足したが、その状況は (オブジェクトをいくつか
   消去することで) まだ復旧可能かもしれない場合に送出されます。この例
   外の関連値は、メモリ不足になった (内部) 操作の種類を示す文字列です
   。下層のメモリ管理アーキテクチャ (C の "malloc()" 関数) のために、
   インタプリタが現状から完璧に復旧できるとはかぎらないので注意してく
   ださい。それでも、プログラムの暴走が原因の場合に備えて実行スタック
   のトレースバックを出力できるように、例外が送出されます。

exception NameError

   ローカルまたはグローバルの名前が見つからなかった場合に送出されます
   。これは非修飾の (訳注: "spam.egg" ではなく単に "egg" のような) 名
   前のみに適用されます。関連値は見つからなかった名前を含むエラーメッ
   セージです。

   オプションのキーワード専用引数 *name* は、次の属性に値を設定します:

   name

      アクセスしようとした変数の名前。

   バージョン 3.10 で変更: "name" 属性が追加されました。

exception NotImplementedError

   この例外は "RuntimeError" から派生しています。 ユーザ定義の基底クラ
   スでは、派生クラスにメソッドのオーバーライドを求める場合に、抽象メ
   ソッドからこの例外を送出するべきです。 また、クラスの開発中に、実際
   の実装をまだ追加する必要があることを示すためにも送出するべきです。

   注釈:

     演算子やメソッドをそもそもサポートする意図がないことを示すために
     、この例外を使うべきではありません。 その場合は演算子やメソッドを
     未定義のままにするか、サブクラスであれば "None" を設定してくださ
     い。

   注意:

     "NotImplementedError" と "NotImplemented" は互いに置き換えられま
     せん。 この例外は、上で説明した用途にのみ使ってください。 組み込
     み定数の正しい使い方については "NotImplemented" を参照してくださ
     い。

exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])

   この例外はシステム関数がシステム関連のエラーを返した場合に送出され
   ます。例えば "file not found" や "disk full" のような I/O の失敗が
   発生したときです (引数の型が不正な場合や、他の偶発的なエラーは除き
   ます)。

   コンストラクタの2番目の形式は下記の対応する属性を設定します。指定さ
   れなかった場合属性はデフォルトで "None" です。後方互換性のために、
   引数が3つ渡された場合、"args" 属性は最初の2つの要素のみからなるタプ
   ルを持ちます。

   コンストラクタは、下の OS exceptions で説明する "OSError" のサブク
   ラスを実際に返すことがよくあります。 どのサブクラスを返すかは、最終
   的な "errno" の値によって決まります。 この挙動は、"OSError" を直接
   またはエイリアスを通して構築した場合にのみ発生し、サブクラスには継
   承されません。

   errno

      C 変数 "errno" に由来する数値エラーコードです。

   winerror

      Windows では、ネイティブの Windows エラーコードを表します。 この
      場合、"errno" 属性は、そのネイティブエラーコードを POSIX のエラ
      ーコードにおおよそ変換した値です。

      Windows では、*winerror* コンストラクタ引数が整数の場合 "errno"
      属性は Windows エラーコードから決定され、*errno* 引数は無視され
      ます。他のプラットフォームでは *winerror* 引数は無視され、
      "winerror" 属性は存在しません。

   strerror

      The corresponding error message, as provided by the operating
      system.  It is formatted by the C functions "perror()" under
      POSIX, and "FormatMessage()" under Windows.

   filename
   filename2

      ファイルシステムパスが1つ関与する例外 (例えば "open()" や
      "os.unlink()") の場合、"filename" は関数に渡されたファイル名です
      。 ファイルシステムパスが2つ関与する関数 (例えば "os.rename()")
      の場合、"filename2" は関数に渡された2つ目のファイル名です。

   バージョン 3.3 で変更: "EnvironmentError"、"IOError"、
   "WindowsError"、"socket.error"、"select.error"、"mmap.error" は
   "OSError" に統合され、 コンストラクタはサブクラスを返すことがありま
   す。

   バージョン 3.4 で変更: "filename" 属性は、*filesystem encoding and
   error handler* に従ってエンコードまたはデコードされた名前ではなく、
   関数に渡された元のファイル名になりました。 また、コンストラクタ引数
   と属性の *filename2* が追加されました。

exception OverflowError

   算術演算の結果が表現できない大きな値になった場合に送出されます。こ
   れは整数では起こりません (むしろ "MemoryError" が送出されることにな
   るでしょう)。しかし、歴史的な理由のため、要求された範囲の外の整数に
   対して OverflowError が送出されることがあります。C の浮動小数点演算
   の例外処理は標準化されていないので、ほとんどの浮動小数点演算もチェ
   ックされません。

exception PythonFinalizationError

   この例外は "RuntimeError" から派生しています。 *Python の終了処理*
   とも呼ばれるインタープリタのシャットダウン中に、操作が阻止された場
   合に送出されます。

   Python の終了処理中に "PythonFinalizationError" によって阻止される
   ことがある操作の例:

   * 新しい Python スレッドの作成。

   * 実行中のデーモンスレッドの "終了待機"。

   * "os.fork()" の呼び出し。

   * そのまま操作を進めるとデッドロックすると分かっている場合の、
     "threading.Lock" などのロックの獲得。

   "sys.is_finalizing()" 関数も参照してください。

   Added in version 3.13: 以前は "RuntimeError" をそのまま送出していま
   した。

   バージョン 3.14 で変更: "threading.Thread.join()" がこの例外を送出
   することがあるようになりました。

   バージョン 3.15 で変更: This exception may be raised when acquiring
   "threading.Lock()" or "threading.RLock()".

exception RecursionError

   この例外は "RuntimeError" を継承しています。インタープリタが最大再
   帰深度 ("sys.getrecursionlimit()" を参照) の超過を検出すると送出さ
   れます。

   Added in version 3.5: 以前は "RuntimeError" をそのまま送出していま
   した。

exception ReferenceError

   "weakref.proxy()" によって生成された弱参照 (weak reference) プロキ
   シを使って、ガーベジコレクションによって回収された後の参照対象オブ
   ジェクトの属性にアクセスした場合に送出されます。弱参照については
   "weakref" モジュールを参照してください。

exception RuntimeError

   他のカテゴリに分類できないエラーが検出された場合に送出されます。関
   連値は、何が問題だったのかをより詳細に示す文字列です。

exception StopIteration

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

   value

      この例外オブジェクトには一つの属性 "value" があり、例外を構成す
      る際に引数として与えられ、デフォルトは "None" です。

   *generator* や *coroutine* 関数が返るとき、新しい "StopIteration"
   インスタンスが送出されます。 関数の返り値は例外のコンストラクタの
   "value" 引数として使われます。

   ジェネレータのコードが直接的あるいは間接的に "StopIteration" を送出
   する場合は、 "RuntimeError" に変換されます ("StopIteration" は変換
   後の例外の原因として保持されます)。

   バージョン 3.3 で変更: "value" 属性とジェネレータ関数が値を返すため
   にそれを使う機能が追加されました。

   バージョン 3.5 で変更: "from __future__ import generator_stop" によ
   る RuntimeError への変換が導入されました。 **PEP 479** を参照してく
   ださい。

   バージョン 3.7 で変更: **PEP 479** が全てのコードでデフォルトで有効
   化されました: ジェネレータから送出された "StopIteration" は
   "RuntimeError" に変換されます。

exception StopAsyncIteration

   イテレーションを停止するために、*asynchronous iterator* オブジェク
   トの "__anext__()" メソッドから送出しなければなりません。

   Added in version 3.5.

exception SyntaxError(message, details)

   パーザが構文エラーに遭遇した場合に送出されます。 この例外は、
   "import" 文、組み込み関数 "compile()"、"exec()"、"eval()" の呼び出
   し、 最初に実行するスクリプトや標準入力の読み込み時 (対話的な実行時
   も含みます) に起こる可能性があります。

   例外インスタンスの "str()" はエラーメッセージのみを返します。詳細は
   タプルで、個々の属性としても利用できます。

   filename

      構文エラーが発生したファイルの名前。

   lineno

      ファイルのエラーが発生した行番号。1から数えはじめるため、ファイ
      ルの最初の行の "lineno" は1です。

   offset

      行のエラーが発生した列番号。1から数えはじめるため、行の最初の文
      字の "offset" は1です。

   text

      エラーを含むソースコードのテキスト。

   end_lineno

      ファイルのエラーが発生した最後の行番号。1から数えはじめるため、
      ファイルの最初の行の "lineno" は1です。

   end_offset

      行のエラーが発生した最後の列番号。1から数えはじめるため、行の最
      初の文字の "offset" は1です。

   For errors in f-string fields, the message is prefixed by
   "f-string: " and the offsets are offsets in a text constructed from
   the replacement expression.  For example, compiling f'Bad {a b}
   field' results in this args attribute: ('f-string: ...', ('', 1, 2,
   '(a b)n', 1, 5)).

   バージョン 3.10 で変更: "end_lineno" および "end_offset" 属性が追加
   されました。

exception IndentationError

   正しくないインデントに関する構文エラーの基底クラスです。これは
   "SyntaxError" のサブクラスです。

exception TabError

   タブとスペースを一貫しない方法でインデントに使っているときに送出さ
   れます。これは "IndentationError" のサブクラスです。

exception SystemError

   インタープリタが内部エラーを検出したものの、実行の継続を断念するほ
   ど深刻な状況ではない場合に送出されます。 関連値は、何が問題だったの
   かを低水準の用語で示す文字列です。 *CPython* では、例外を設定せずに
   "NULL" 値を返すなど、Python の C API を誤って使うと送出されることが
   あります。

   この例外の原因が自分のコードにも使用中のパッケージにもないと確信で
   きる場合は、 使用している Python インタープリタの作者やメンテナに報
   告してください。 Python インタープリタのバージョン ("sys.version"
   の値で、対話型 Python セッションの開始時にも表示されます)、 正確な
   エラーメッセージ (例外の関連値)、可能であればエラーを引き起こしたプ
   ログラムのソースを必ず報告してください。

exception SystemExit

   この例外は "sys.exit()" 関数によって送出されます。 "Exception" を捕
   捉するコードに誤って捕捉されないように、"Exception" ではなく
   "BaseException" を継承しています。 これにより、例外が適切に伝播し、
   インタープリタを終了できます。 この例外が処理されない場合、Python
   インタープリタは終了し、スタックトレースバックは表示されません。 コ
   ンストラクタには、"sys.exit()" と同じオプションの引数を渡せます。
   値が整数の場合は、システムの終了ステータスを指定します (C の
   "exit()" 関数に渡されます)。 "None" の場合、終了ステータスはゼロで
   す。 それ以外の型 (文字列など) の場合、オブジェクトの値が表示され、
   終了ステータスは1になります。

   "sys.exit()" は、クリーンアップのための処理 ("try" 文の "finally"
   節) が実行されるようにするため、またデバッガが制御不能になるリスク
   を冒さずにスクリプトを実行できるようにするために例外に変換されます
   。即座に終了することが真に強く必要であるとき (例えば、"os.fork()"
   を呼んだ後の子プロセス内) には "os._exit()" 関数を使うことができま
   す。

   code

      コンストラクタに渡された終了ステータス又はエラーメッセージ。(デ
      フォルトは "None")

exception TypeError

   演算や関数を適切でない型のオブジェクトに適用した場合に送出されます
   。 関連値は、型の不整合の詳細を示す文字列です。

   そのオブジェクトで実行しようとした操作がサポートされておらず、サポ
   ートする意図もないことを示すために、 ユーザコードからこの例外を送出
   することもできます。 操作をサポートする意図はあるものの、まだ実装し
   ていない場合には、"NotImplementedError" を送出するのが適切です。

   誤った型の引数が渡された場合は (例えば、"int" が期待されるのに、
   "list" が渡された) "TypeError" となるべきです。しかし、誤った値(例
   えば、期待する範囲外の数)が引数として渡された場合は、 "ValueError"
   となるべきです。

exception UnboundLocalError

   関数やメソッド内のローカルな変数に対して参照を行ったが、その変数に
   は値が代入されていなかった場合に送出されます。 "NameError" のサブク
   ラスです。

exception UnicodeError

   Unicode に関するエンコードまたはデコードのエラーが発生した際に送出
   されます。 "ValueError" のサブクラスです。

   "UnicodeError" はエンコードまたはデコードのエラーの説明を属性として
   持っています。例えば、 "err.object[err.start:err.end]" は、無効な入
   力のうちコーデックが処理に失敗した箇所を表します。

   encoding

      エラーを送出したエンコーディングの名前です。

   reason

      そのコーデックエラーを説明する文字列です。

   object

      コーデックがエンコードまたはデコードしようとしたオブジェクトです
      。

   start

      "object" の最初の無効なデータのインデクスです。

      この値は絶対オフセットとして解釈されるため、負の値にすべきではあ
      りませんが、この制約は実行時には強制されません。

   end

      "object" の最後の無効なデータの次のインデクスです。

      この値は絶対オフセットとして解釈されるため、負の値にすべきではあ
      りませんが、この制約は実行時には強制されません。

exception UnicodeEncodeError

   Unicode 関連のエラーがエンコード中に発生した際に送出されます。
   "UnicodeError" のサブクラスです。

exception UnicodeDecodeError

   Unicode 関連のエラーがデコード中に発生した際に送出されます。
   "UnicodeError" のサブクラスです。

exception UnicodeTranslateError

   Unicode 関連のエラーが変換中に発生した際に送出されます。
   "UnicodeError" のサブクラスです。

exception ValueError

   演算や関数が、型は正しいものの値が適切でない実引数を受け取り、 かつ
   、その状況を "IndexError" などのより具体的な例外で表せない場合に送
   出されます。

exception ZeroDivisionError

   除算や剰余演算の第2引数がゼロの場合に送出されます。 関連値は、被演
   算子の型と演算の種類を示す文字列です。

以下の例外は、過去のバージョンとの後方互換性のために残されています;
Python 3.3 より、これらは "OSError" のエイリアスです。

exception EnvironmentError

exception IOError

exception WindowsError

   Windows でのみ利用できます。


OS 例外
-------

以下の例外は "OSError" のサブクラスで、システムエラーコードに依存して
送出されます。

exception BlockingIOError

   ノンブロッキング操作に設定されたオブジェクト (例えばソケット) に対
   する操作をすぐに完了できず、待機が必要な場合に送出されます。
   "errno" "EAGAIN"、"EALREADY"、"EWOULDBLOCK"、"EINPROGRESS" に対応し
   ます。

   "BlockingIOError" は、 "OSError" の属性に加えて一つの属性を持ちます
   :

   characters_written

      ブロックするまでにストリームへ書き込まれた **バイト数** を表す整
      数です。 この属性は、"io" モジュールのバッファ付き I/O クラスを
      使う場合に利用できます。

exception ChildProcessError

   子プロセスの操作が失敗した場合に送出されます。"errno" "ECHILD" に対
   応します。

exception ConnectionError

   コネクション関係の問題の基底クラス。

   サブクラスは "BrokenPipeError", "ConnectionAbortedError",
   "ConnectionRefusedError", "ConnectionResetError" です。

exception BrokenPipeError

   "ConnectionError" のサブクラスです。 もう一方の端が閉じられたパイプ
   に書き込もうとした場合や、 書き込み側がシャットダウンされたソケット
   に書き込もうとした場合に送出されます。 "errno" "EPIPE" と
   "ESHUTDOWN" に対応します。

exception ConnectionAbortedError

   "ConnectionError" のサブクラスで、接続の試行が通信相手によって中断
   された場合に発生します。 "errno" "ECONNABORTED" に対応します。

exception ConnectionRefusedError

   "ConnectionError" のサブクラスで、接続の試行が通信相手によって拒否
   された場合に発生します。 "errno" "ECONNREFUSED" に対応します。

exception ConnectionResetError

   "ConnectionError" のサブクラスで、接続が通信相手によってリセットさ
   れた場合に発生します。 "errno" "ECONNRESET" に対応します。

exception FileExistsError

   すでに存在するファイルやディレクトリを作成しようとした場合に送出さ
   れます。"errno" "EEXIST" に対応します。

exception FileNotFoundError

   要求されたファイルやディレクトリが存在しない場合に送出されます。
   "errno" "ENOENT" に対応します。

exception InterruptedError

   システムコールが受信したシグナルによって中断された場合に送出されま
   す。 "errno" "EINTR" に対応します。

   バージョン 3.5 で変更: シグナルハンドラが例外を送出せず、システムコ
   ールが信号で中断された場合 Python は "InterruptedError" を送出する
   代わりにシステムコールを再試行するようになりました (論拠については
   **PEP 475** を参照してください) 。

exception IsADirectoryError

   ディレクトリに ("os.remove()" などの) ファイル操作が要求された場合
   に送出されます。"errno" "EISDIR" に対応します。

exception NotADirectoryError

   ディレクトリに対する操作 (例えば "os.listdir()") がディレクトリ以外
   の対象に要求された場合に送出されます。 ほとんどの POSIX プラットフ
   ォームでは、ディレクトリでないファイルをディレクトリとして開いたり
   、 パスをたどろうとしたりした場合にも送出されることがあります。
   "errno" "ENOTDIR" に対応します。

exception PermissionError

   十分なアクセス権、例えばファイルシステム権限のない操作が試みられた
   場合に送出されます。"errno" "EACCES"、"EPERM" および "ENOTCAPABLE"
   に対応します。

   バージョン 3.11.1 で変更: WASIの "ENOTCAPABLE" は "PermissionError"
   にマップされました。

exception ProcessLookupError

   与えられたプロセスが存在しない場合に送出されます。"errno" "ESRCH"
   に対応します。

exception TimeoutError

   システム関数がシステムレベルでタイムアウトした場合に送出されます。
   "errno" "ETIMEDOUT" に対応します。

Added in version 3.3: 上記のすべての "OSError" サブクラスが追加されま
した。

参考: **PEP 3151** - OS および IO 例外階層の手直し


警告
====

次の例外は警告カテゴリとして使われます。詳細については 警告カテゴリ の
ドキュメントを参照してください。

exception Warning

   警告カテゴリの基底クラスです。

exception UserWarning

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

exception DeprecationWarning

   非推奨の機能について、他の Python 開発者に向けて発する警告の基底ク
   ラスです。

   "__main__" モジュールを除いて(**PEP 565**)、デフォルトの警告フィル
   ターで無効化されています。Python Development Mode を有効にするとこ
   の警告が表示されます。

   非推奨化の方針は **PEP 387** で説明されています。

exception PendingDeprecationWarning

   古くなっており、将来は非推奨になる見込みですが、現時点では非推奨で
   はない機能についての警告の基底クラスです。

   将来、非推奨になる可能性を事前に警告することは一般的ではないため、
   このクラスはめったに使われません。 すでに非推奨となっている機能には
   "DeprecationWarning" が推奨されます。

   デフォルトの警告フィルターで無効化されています。Python Development
   Mode を有効にするとこの警告が表示されます。

   非推奨化の方針は **PEP 387** で説明されています。

exception SyntaxWarning

   疑わしい構文についての警告の基底クラスです。

   この警告は通常、Python ソースコードのコンパイル時に発生し、コンパイ
   ル済みのコードの実行時には通常は報告されません。

exception RuntimeWarning

   実行時の疑わしい振る舞いについての警告の基底クラスです。

exception FutureWarning

   非推奨の機能について、Python で書かれたアプリケーションのエンドユー
   ザーに向けて発する警告の基底クラスです。

exception ImportWarning

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

   デフォルトの警告フィルターで無効化されています。Python Development
   Mode を有効にするとこの警告が表示されます。

exception UnicodeWarning

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

exception EncodingWarning

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

   詳細は EncodingWarning の有効化 を参照してください。

   Added in version 3.10.

exception BytesWarning

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

exception ResourceWarning

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

   デフォルトの警告フィルターで無効化されています。Python Development
   Mode を有効にするとこの警告が表示されます。

   Added in version 3.2.


例外グループ
============

以下は関係がない複数の例外を送出する必要があるときに使用します。例外グ
ループは例外の階層構造の一部のため、他の例外と同様 "except" で処理でき
ます。また、"except*" によって判別でき、例外グループに含まれている例外
の型に基づいてサブグループにマッチします。

exception ExceptionGroup(msg, excs)

exception BaseExceptionGroup(msg, excs)

   どちらの例外型も、シーケンス "excs" に含まれる例外をまとめて保持し
   ます。 "msg" パラメータは文字列でなければなりません。 2つのクラスの
   違いは、"BaseExceptionGroup" が "BaseException" を拡張して任意の例
   外を保持できるのに対し、 "ExceptionGroup" は "Exception" を拡張し、
   "Exception" のサブクラスの例外のみを保持できることです。 この設計に
   より、"except Exception" は "ExceptionGroup" を捕捉しますが、
   "BaseExceptionGroup" は捕捉しません。

   "BaseExceptionGroup" のコンストラクタは、保持する例外がすべて
   "Exception" のインスタンスである場合、 "BaseExceptionGroup" ではな
   く "ExceptionGroup" を返すので、クラスの選択を自動化するために利用
   できます。 一方、"ExceptionGroup" のコンストラクタは、"Exception"
   のサブクラスのインスタンスでない例外が一つでも含まれていると
   "TypeError" を送出します。

   例外グループは、保持する例外の型をパラメータとする ジェネリック型
   です。

   "excs" パラメータには任意のシーケンスを指定できますが、リストとタプ
   ルは特に効率よく処理されます。 最適なパフォーマンスを得るには、
   "excs" にタプルを渡してください。

   message

      コンストラクタの "msg" 引数。この属性は読み込み専用です。

   exceptions

      コンストラクタに渡された一連の "excs" に含まれる例外のタプルです
      。この属性は読み込み専用です。

   subgroup(condition)

      現在のグループの例外のうち、*condition* にマッチするものだけを含
      む例外グループを返します。 結果が空の場合は "None" を返します。

      条件には例外型または例外型のタプルを指定でき、 その場合は
      "except" 節と同じ判定方法で各例外がマッチするかを調べます。 また
      、例外を唯一の引数として受け取り、サブグループに含めるべき例外に
      対して真を返す呼び出し可能オブジェクト (型オブジェクトを除く) も
      指定できます。

      結果には、現在の例外の入れ子構造と、"message"、"__traceback__"、
      "__cause__"、"__context__"、"__notes__" の各フィールドの値が保持
      されます。 入れ子になった空のグループは結果から除かれます。

      条件は、最上位の例外グループと入れ子になったすべての例外グループ
      も含め、 入れ子の例外グループ内のすべての例外に対して調べられま
      す。 例外グループに対して条件が真となる場合、そのグループ全体が
      結果に含まれます。

      Added in version 3.13: "condition" に、型オブジェクト以外の任意
      の呼び出し可能オブジェクトを指定できるようになりました。

   split(condition)

      "subgroup()" と似てますが "(match, rest)" のペアを返します。
      "match" は "subgroup(condition)" で "rest" は残りのマッチしない
      部分です。

   derive(excs)

      同じ "message" の例外グループを返しますが、"excs" の例外を含んで
      います。

      このメソッドは、さまざまな状況で例外グループを分割するために使わ
      れる "subgroup()" と "split()" から呼び出されます。 サブクラスで
      "subgroup()" と "split()" が "ExceptionGroup" ではなくそのサブク
      ラスのインスタンスを返すようにするには、 このメソッドをオーバー
      ライドする必要があります。

      "subgroup()" と "split()" は "__traceback__"、"__cause__"、
      "__context__" と "__notes__" フィールドを元の例外グループから
      "derive()" が返す例外グループにコピーするため、"derive()" ではこ
      れらのフィールドを更新する必要がありません。

         >>> class MyGroup(ExceptionGroup):
         ...     def derive(self, excs):
         ...         return MyGroup(self.message, excs)
         ...
         >>> e = MyGroup("eg", [ValueError(1), TypeError(2)])
         >>> e.add_note("a note")
         >>> e.__context__ = Exception("context")
         >>> e.__cause__ = Exception("cause")
         >>> try:
         ...    raise e
         ... except Exception as e:
         ...    exc = e
         ...
         >>> match, rest = exc.split(ValueError)
         >>> exc, exc.__context__, exc.__cause__, exc.__notes__
         (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
         >>> match, match.__context__, match.__cause__, match.__notes__
         (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note'])
         >>> rest, rest.__context__, rest.__cause__, rest.__notes__
         (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
         >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__
         True

   "BaseExceptionGroup" は "__new__()" を定義しているため、 異なるコン
   ストラクタシグネチャが必要なサブクラスでは、"__init__()" ではなく
   "__new__()" をオーバーライドする必要があります。 例えば、次のコード
   では "exit_code" を受け取り、そこからグループのメッセージを作成する
   例外グループのサブクラスを定義しています。

      class Errors(ExceptionGroup):
         def __new__(cls, errors, exit_code):
            self = super().__new__(Errors, f"exit code: {exit_code}", errors)
            self.exit_code = exit_code
            return self

         def derive(self, excs):
            return Errors(excs, self.exit_code)

   "ExceptionGroup" と同様に、"BaseExceptionGroup" のサブクラスであり
   、 かつ "Exception" のサブクラスでもあるクラスは、"Exception" のイ
   ンスタンスのみを保持できます。

   Added in version 3.11.


例外のクラス階層
================

組み込み例外のクラス階層は以下のとおりです:

   BaseException
    ├── BaseExceptionGroup
    ├── GeneratorExit
    ├── KeyboardInterrupt
    ├── SystemExit
    └── Exception
         ├── ArithmeticError
         │    ├── FloatingPointError
         │    ├── OverflowError
         │    └── ZeroDivisionError
         ├── AssertionError
         ├── AttributeError
         ├── BufferError
         ├── EOFError
         ├── ExceptionGroup [BaseExceptionGroup]
         ├── ImportError
         │    └── ImportCycleError
         │    └── 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
         │    ├── PythonFinalizationError
         │    └── 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
