4 組み込み例外

例外はクラスオブジェクトです。 例外はモジュール exceptions で定義されています。 このモジュールを明示的にインポートする必要はありません: 例外は exceptions モジュールと同様に組み込み名前空間で 与えられます。

注意: 過去の Python のバージョンでは、文字列の例外がサポートされていました。 Python 1.5 よりも新しいバージョンでは、全ての標準的な例外は クラスオブジェクトに変換され、ユーザにも同様にするよう奨励しています。 文字列による例外は PendingDeprecationWarning を 送出するようになります。 将来のバージョンでは、文字列による例外のサポートは削除されます。

同じ値を持つ別々の文字列オブジェクトは異なる例外と見なされます。 これはプログラマに対して、例外処理を指定する際に、 文字列ではなく例外名を使わせるための変更です。組み込み例外の文字列値は 全てその名前となりますが、ユーザ定義の例外やライブラリモジュールで定義される 例外についてもそうするように要求しているわけではありません。

try 文の中で、except 節を使って特定の例外クラスについて記述した場合、その節は 指定した例外クラスから導出されたクラスも扱います (指定した例外 クラスを導出した元のクラスは含みません) サブクラス化の関係にない例外クラスが二つあった場合、それらに同じ 名前を付けたとしても、等しくなることはありません。

以下に列挙した組み込み例外はインタプリタや組み込み関数によって生成 されます。特に注記しないかぎり、これらの例外は エラーの詳しい原因を 示している、 ``関連値 (associated value)'' を持ちます。 この値は文字列または複数の情報 (例えばエラーコードや、エラーコード を説明する文字列) を含むタプルです。この関連値は raise 文の二つ目の引数です。 文字列の例外の場合、関連値自体は except 節 (あった場合) の二つ目の引数として与えた名前を持つ変数に記憶されます。 クラス例外の場合、この値は例外クラスのインスタンスです。 例外が標準のルートクラスである Exception から 導出された場合、関連値は例外インスタンスの args 属性中 に他の属性と同様に置かれます。

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

組み込み例外クラスは新たな例外を定義するためにサブクラス化する ことができます; プログラマには、新しい例外を少なくとも Exception 基底クラスから導出するよう勧めます。 例外を定義する上での詳しい情報は、 Python チュートリアル の ``ユーザ定義の例外'' の項目にあります。

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

exception Exception
例外のルートクラスです。全ての組み込み例外はこのクラスから導出 されています。全てのユーザ定義例外はこのクラスから導出される べきですが、(今のところまだ) それは強制ではありません。 str() をこのクラス (またはほとんどの導出クラス) の インスタンスに適用すると、引数を文字列にしたが返されるか、 インスタンスのコンストラクタが引数なしの場合には空の文字列が返されます。 インスタンスをシーケンスとして使うと、コンストラクタに渡された引数にアクセス することができます (古いコードとの互換性のために便利です)。 引数はまた、インスタンスの args 属性として、タプルで 得ることもできます。

exception StandardError
StopIteration および SystemExit 以外の、 全ての組み込み例外の基底クラスです。 StandardError 自体はルートクラス Exception から導出されています。

exception ArithmeticError
算術上の様々なエラーにおいて送出される組み込み例外: OverflowError、ZeroDivisionError、 FloatingPointError の基底クラスです。

exception LookupError
マップ型またはシーケンス型に使ったキーやインデクスが無効な値の場合に 送出される例外:IndexError、KeyError の基底クラスです。sys.setdefaultencoding() によって直接送出されることもあります。

exception EnvironmentError
Python システムの外部で起こっているはずの例外: IOError、 OSError の基底クラスです。この型の例外が 2 つの要素を もつタプルで生成された場合、最初の要素はインスタンスの errno 属性で得ることができます (この値はエラー番号と見なされます)。二つめの 要素は strerror 属性です (この値は通常、エラーに関連する メッセージです)。タプル自体は args 属性から得ることもできます。 バージョン 1.5.2 で 新たに追加 された仕様です。

EnvironmentError 例外が 3 要素のタプルで生成された場合、 最初の 2 つの要素は上と同様に得ることができる一方、3 つ目の要素は filename 属性で得ることができます。しかしながら、以前の バージョンとの互換性のために、args 属性にはコンストラクタに渡した 最初の 2 つの引数からなる 2 要素のタプルしか含みません。

この例外が 3 つ以外の引数で生成された場合、filename 属性は None になります。この例外が 2 または 3 つ以外の引数で生成 された場合、errno および strerror 属性も None になります。後者のケースでは、args が コンストラクタに与えた引数をそのままタプルの形で含んでいます。

以下の例外は実際に送出される例外です。

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

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

exception EOFError
組み込み関数 (input() または raw_input()) のいずれかで、データを全く読まないうちにファイルの終端 (EOF) に 到達した場合に送出されます。 (注意: ファイルオブジェクトの read() および readline() メソッドの場合、データを読まないうちに EOFにたどり着くと空の文字列 を返します。)

exception FloatingPointError
浮動小数点演算が失敗した場合に送出されます。この例外はどの Python のバージョンでも常に定義されていますが、Python が --with-fpectl オプションをつけた状態に設定されて いるか、pyconfig.h ファイルにシンボル WANT_SIGFPE_HANDLER が定義されている場合にのみ 送出されます。

exception IOError
(print 文、組み込みの open() またはファイル オブジェクトに対するメソッドといった) I/O 操作が、例えば ``ファイルが存在しません'' や ``ディスクの空き領域がありません'' といった I/O に関連した理由で失敗した場合に送出されます。

このクラスは EnvironmentError から導出されています。 この例外クラスのインスタンス属性に関する情報は上記の EnvironmentError に関する議論を参照してください。

exception ImportError
import 文でモジュール定義を見つけられなかった場合や、 from ... import 文で指定した名前をインポート することができなかった場合に送出されます。

exception IndexError
シーケンスのインデクス指定がシーケンスの範囲を超えている場合に送出 されます。(スライスのインデクスはシーケンスの範囲に収まるように暗黙のうちに 調整されます; インデクスが通常の整数でない場合、TypeError が送出されます。)

exception KeyError
マップ型 (辞書型) オブジェクトのキーが、オブジェクトのキー集合内に 見つからなかった場合に送出されます。

exception KeyboardInterrupt
ユーザが割り込みキー (通常は Control-C または Delete キー です) を押した場合に送出されます。割り込みが起きたかどうかはインタプリタ の実行中に定期的に調べられます。 組み込み関数 input() や raw_input() がユーザの 入力を待っている間に割り込みキーを押しても、この例外が送出されます。

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

exception NameError
ローカルまたはグローバルの名前が見つからなかった場合に送出されます。 これは非限定の名前のみに適用されます。関連付けられた値は見つからなかった 名前を含むエラーメッセージです。

exception NotImplementedError
この例外は RuntimeError から導出されています。ユーザ定義の 基底クラスにおいて、そのクラスの導出クラスにおいてオーバライドする ことが必要な抽象化メソッドはこの例外を送出しなくてはなりません。 バージョン 1.5.2 で 新たに追加 された仕様です。

exception OSError
このクラスは EnvironmentError から導出されており、 主に os モジュールの os.error 例外で使われて います。例外に関連付けられる可能性のある値については、上記の EnvironmentError を参照してください。 バージョン 1.5.2 で 新たに追加 された仕様です。

exception OverflowError
算術演算の結果、表現するには大きすぎる値になった場合に送出されます。 これは長整数の演算では起こりません (長整数の演算ではむしろ MemoryError が送出されることになるでしょう)。 C では浮動小数点演算における例外処理の標準化が行われていないので、 ほとんどの浮動小数点演算もチェックされていません。通常の整数では、 オーバフローを起こす全ての演算がチェックされます。例外は左シフトで、 典型的なアプリケーションでは左シフトのオーバフローでは例外を送出する よりもむしろ、オーバフローしたビットを捨てるようにしています。

exception ReferenceError
weakref.proxy() によって生成された弱参照 (weak reference) プロキシを使って、ガーベジコレクションによって処理 された後の参照対象オブジェクトの属性にアクセスした場合に送出されます。 弱参照については weakref モジュールを参照してください。 バージョン 2.2 で 新たに追加 された仕様: 以前は weakref.ReferenceError 例外として知られていました。

exception RuntimeError
他のカテゴリに分類できないエラーが検出された場合に送出されます。 関連付けられた値は何が問題だったのかをより詳細に示す文字列です。 (この例外はほとんど過去のバージョンのインタプリタにおける遺物です; この例外はもはやあまり使われることはありません)

exception StopIteration
イテレータの next() メソッドにより、それ以上要素がないことを 知らせるために送出されます。 この例外は、通常のアプリケーションではエラーとはみなされないので、 StandardError ではなく Exception から導出 されています。 バージョン 2.2 で 新たに追加 された仕様です。

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

このクラスのインスタンスは、例外の詳細に簡単にアクセスできるように するために、属性 filename、lineno、 offset および text を持ちます。 例外インスタンスに対する str() はメッセージのみを返します。

exception SystemError
インタプリタが内部エラーを発見したが、その状況は全ての望みを 棄てさせるほど深刻ではないように思われる場合に送出されます。 関連づけられた値は (控えめな言い方で) 何がまずいのかを示す文字列です。

Python の作者か、あなたの Python インタプリタを保守している人に このエラーを報告してください。このとき、 Python インタプリタの バージョン (sys.version; Python の対話的セッションを開始した 際にも出力されます)、正確なエラーメッセージ (例外に関連付けられた値) を忘れずに報告してください。 そしてもし可能ならエラーを引き起こしたプログラムのソースコードを 報告してください。

exception SystemExit
この例外は sys.exit() 関数によって送出されます。この例外が 処理されなかった場合、Python インタプリタは終了します; スタックの トレースバックは全く印字されません。関連付けられた値が通常の整数 である場合、システム終了状態を指定しています (exit() 関数に 渡されます); 値が Noneの場合、終了状態はゼロです; (文字列のような) 他の型の場合、そのオブジェクトの値が印字され、終了状態は 1 になります。

この例外のインスタンスは属性 code を持ちます。この値は 終了状態またはエラーメッセージ (標準では None です) に 設定されます。また、この例外は技術的にはエラーではないため、 StandardError からではなく、Exception から 導出されています。

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

exception TypeError
組み込み演算または関数が適切でない型のオブジェクトに対して適用 された際に送出されます。関連付けられる値は型の不整合に関して 詳細を述べた文字列です。

exception UnboundLocalError
関数やメソッド内のローカルな変数に対して参照を行ったが、その変数には 値がバインドされていなかった際に送出されます。NameError のサブクラスです。 バージョン 2.0 で 新たに追加 された仕様です。

exception UnicodeError
Unicode に関するエンコードまたはデコードのエラーが発生した際に送出 されます。ValueError のサブクラスです。 バージョン 2.0 で 新たに追加 された仕様です。

exception UnicodeEncodeError
Unicode 関連のエラーがエンコード中に発生した際に送出されます。 UnicodeError のサブクラスです。 バージョン 2.3 で 新たに追加 された仕様です。

exception UnicodeDecodeError
Unicode 関連のエラーがデコード中に発生した際に送出されます。 UnicodeError のサブクラスです。 バージョン 2.3 で 新たに追加 された仕様です。

exception UnicodeTranslateError
Unicode 関連のエラーがコード翻訳に発生した際に送出されます。 UnicodeError のサブクラスです。 バージョン 2.3 で 新たに追加 された仕様です。

exception ValueError
組み込み演算や関数が、正しい型だが適切でない値を受け取った場合、 および IndexError のように、より詳細な説明のできない 状況で送出されます。

exception WindowsError
Windows 特有のエラーか、エラー番号が errno 値に対応しない 場合に送出されます。errno および strerror 値は Windows プラットフォーム API の関数、 GetLastError() と FormatMessage() の戻り値から生成されます。 OSError のサブクラスです。 バージョン 2.0 で 新たに追加 された仕様です。

exception ZeroDivisionError
除算またモジュロ演算における二つ目の引数がゼロであった場合に 送出されます。関連付けられている値は文字列で、その演算における 被演算子の型を示します。

以下の例外は警告カテゴリとして使われます; 詳細については warnings モジュールを参照してください。

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

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

exception DeprecationWarning
廃用された機能に対する警告の基底クラスです。

exception PendingDeprecationWarning
将来廃用されることになっている機能に対する警告の基底クラスです。

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

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

exception FutureWarning
将来意味構成が変わることになっている文の構成に対する警告の基底クラスです。

組み込み例外のクラス階層は以下のようになっています:

    Exception
     +-- SystemExit
     +-- StopIteration
     +-- StandardError
     |    +-- KeyboardInterrupt
     |    +-- ImportError
     |    +-- EnvironmentError
     |    |    +-- IOError
     |    |    +-- OSError
     |    |         +-- WindowsError
     |    +-- EOFError
     |    +-- RuntimeError
     |    |    +-- NotImplementedError
     |    +-- NameError
     |    |    +-- UnboundLocalError
     |    +-- AttributeError
     |    +-- SyntaxError
     |    |    +-- IndentationError
     |    |         +-- TabError
     |    +-- TypeError
     |    +-- AssertionError
     |    +-- LookupError
     |    |    +-- IndexError
     |    |    +-- KeyError
     |    +-- ArithmeticError
     |    |    +-- OverflowError
     |    |    +-- ZeroDivisionError
     |    |    +-- FloatingPointError
     |    +-- ValueError
     |    |    +-- UnicodeError
     |    |        +-- UnicodeEncodeError
     |    |        +-- UnicodeDecodeError
     |    |        +-- UnicodeTranslateError
     |    +-- ReferenceError
     |    +-- SystemError
     |    +-- MemoryError
     +---Warning
	  +-- UserWarning
	  +-- DeprecationWarning
	  +-- PendingDeprecationWarning
	  +-- SyntaxWarning
	  +-- OverflowWarning (2.4では生成されません。2.5では無くなります)
	  +-- RuntimeWarning
	  +-- FutureWarning
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。