組み込み例外¶
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 LookupError¶
マッピングまたはシーケンスで使われたキーやインデクスが無効な場合に送出される例外
IndexErrorおよびKeyErrorの基底クラスです。codecs.lookup()によって直接送出されることもあります。
具象例外¶
以下の例外は、通常送出される例外です。
- exception AttributeError¶
属性参照 (属性参照 を参照) や代入が失敗した場合に送出されます (オブジェクトが属性の参照や属性の代入をまったくサポートしていない場合には
TypeErrorが送出されます)。オプションのキーワード専用引数 name と obj は、対応する属性に値を設定します:
- 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¶
例外を引き起こしたファイルのパス。
- 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, andFormatMessage()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()orthreading.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__()メソッドによって、そのイテレータが生成するアイテムがこれ以上ないことを伝えるために送出されます。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¶
コーデックがエンコードまたはデコードしようとしたオブジェクトです。
- 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¶
ノンブロッキング操作に設定されたオブジェクト (例えばソケット) に対する操作をすぐに完了できず、待機が必要な場合に送出されます。
errnoEAGAIN、EALREADY、EWOULDBLOCK、EINPROGRESSに対応します。BlockingIOErrorは、OSErrorの属性に加えて一つの属性を持ちます:
- exception ConnectionError¶
コネクション関係の問題の基底クラス。
サブクラスは
BrokenPipeError,ConnectionAbortedError,ConnectionRefusedError,ConnectionResetErrorです。
- exception BrokenPipeError¶
ConnectionErrorのサブクラスです。 もう一方の端が閉じられたパイプに書き込もうとした場合や、 書き込み側がシャットダウンされたソケットに書き込もうとした場合に送出されます。errnoEPIPEとESHUTDOWNに対応します。
- exception ConnectionAbortedError¶
ConnectionErrorのサブクラスで、接続の試行が通信相手によって中断された場合に発生します。errnoECONNABORTEDに対応します。
- exception ConnectionRefusedError¶
ConnectionErrorのサブクラスで、接続の試行が通信相手によって拒否された場合に発生します。errnoECONNREFUSEDに対応します。
- exception ConnectionResetError¶
ConnectionErrorのサブクラスで、接続が通信相手によってリセットされた場合に発生します。errnoECONNRESETに対応します。
- exception InterruptedError¶
システムコールが受信したシグナルによって中断された場合に送出されます。
errnoEINTRに対応します。バージョン 3.5 で変更: シグナルハンドラが例外を送出せず、システムコールが信号で中断された場合 Python は
InterruptedErrorを送出する代わりにシステムコールを再試行するようになりました (論拠については PEP 475 を参照してください) 。
- exception IsADirectoryError¶
ディレクトリに (
os.remove()などの) ファイル操作が要求された場合に送出されます。errnoEISDIRに対応します。
- exception NotADirectoryError¶
ディレクトリに対する操作 (例えば
os.listdir()) がディレクトリ以外の対象に要求された場合に送出されます。 ほとんどの POSIX プラットフォームでは、ディレクトリでないファイルをディレクトリとして開いたり、 パスをたどろうとしたりした場合にも送出されることがあります。errnoENOTDIRに対応します。
- exception PermissionError¶
十分なアクセス権、例えばファイルシステム権限のない操作が試みられた場合に送出されます。
errnoEACCES、EPERMおよびENOTCAPABLEに対応します。バージョン 3.11.1 で変更: WASIの
ENOTCAPABLEはPermissionErrorにマップされました。
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 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