6.組み込み例外

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

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

以下に列挙した組み込み例外はインタプリタや組み込み関数によって生成されます。特に注記しないかぎり、これらの例外はエラーの詳しい原因を示している、 "関連値 (associated value)" を持ちます。この値は文字列または複数の情報 (例えばエラーコードや、エラーコードを説明する文字列) を含むタプルです。この関連値はraise 文の 2 番目の引数です。例外が標準のルートクラスであるBaseException の派生クラスであれば、関連値は例外インスタンスのargs 属性中に置かれます。

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

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

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

exceptionBaseException

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

バージョン 2.5 で追加.

args

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

exceptionException

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

バージョン 2.5 で変更:BaseException を継承するように変更されました.

exceptionStandardError

StopIteration,SystemExit,KeyboardInterrupt,SystemExit 以外の、全ての組み込み例外の基底クラスです。StandardError 自体はException の派生クラスです。

exceptionArithmeticError

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

exceptionBufferError

バッファ (buffer) に関連する演算が行えなかったときに送出されます。

exceptionLookupError

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

exceptionEnvironmentError

Python システムの外部で起こる可能性のある例外IOError およびOSError の基底クラスです。この型の例外が 2 つの要素を持つタプルで生成された場合、 1 番目の要素はインスタンスのerrno 属性で得ることができます (この値はエラー番号と見なされます)。 2 番目の要素はstrerror 属性です (この値は通常、エラーに関連するメッセージです)。タプル自体はargs 属性から得ることもできます。

バージョン 1.5.2 で追加.

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

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

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

exceptionAssertionError

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

exceptionAttributeError

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

exceptionEOFError

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

exceptionFloatingPointError

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

exceptionGeneratorExit

ジェネレータ (generator) のclose() メソッドが呼び出されたときに送出されます。この例外は厳密にはエラーではないので、StandardError ではなくBaseException を直接継承しています。

バージョン 2.5 で追加.

バージョン 2.6 で変更:BaseException を継承するように変更されました.

exceptionIOError

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

このクラスはEnvironmentError の派生クラスです。この例外クラスのインスタンス属性に関する情報は上記のEnvironmentError に関する議論を参照してください。

バージョン 2.6 で変更:socket.error は、この例外を基底クラスとして使うように変更されました。

exceptionImportError

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

exceptionIndexError

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

exceptionKeyError

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

exceptionKeyboardInterrupt

ユーザが割り込みキー (通常はControl-C またはDelete キー) を押した場合に送出されます。割り込みが起きたかどうかはインタプリタの実行中に定期的に調べられます。組み込み関数input()raw_input() がユーザの入力を待っている間に割り込みキーを押してもこの例外が送出されます。この例外はException を処理するコードに誤って捕捉されてインタプリタの終了が阻害されないようにBaseException を継承しています。

バージョン 2.5 で変更:BaseException を継承するように変更されました.

exceptionMemoryError

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

exceptionNameError

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

exceptionNotImplementedError

この例外はRuntimeError から派生しています。ユーザ定義の基底クラスにおいて、抽象メソッドが派生クラスでオーバライドされることを要求する場合、この例外を送出しなくてはなりません。

バージョン 1.5.2 で追加.

exceptionOSError

このクラスはEnvironmentError から派生しています。関数がシステムに関連したエラーを返した場合に送出されます (引数の型が間違っている場合や、他の偶発的なエラーは除きます)。errno 属性はerrno に基づく数字のエラーコードで、strerror 属性は C のperror() 関数で表示されるような文字列です。オペレーティングシステムに依存したエラーコードの定義と名前については、errno モジュールを参照して下さい。

ファイルシステムのパスに関係する例外 (chdir()unlink() など) では、例外インスタンスは 3 番目の属性filename を持ちます。これは関数に渡されたファイル名です。

バージョン 1.5.2 で追加.

exceptionOverflowError

算術演算の結果が表現できない大きな値になった場合に送出されます。これは long integer の演算と通常の整数に関するほとんどの操作では起こりません (long integer の演算ではむしろMemoryError が送出されることになるでしょう)。整数に関するほとんどの操作では、代わりに long integer が返されます。 C の浮動小数点演算の例外処理は標準化されていないので、ほとんどの浮動小数点演算もチェックされません。

exceptionReferenceError

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

バージョン 2.2 で追加:以前はweakref.ReferenceError 例外として知られていました。

exceptionRuntimeError

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

exceptionStopIteration

イテレータ (iterator) のnext() メソッドにより、それ以上要素がないことを知らせるために送出されます。この例外は、通常の利用方法ではエラーとはみなされないため、StandardError ではなくException から派生しています。

バージョン 2.2 で追加.

exceptionSyntaxError

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

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

exceptionIndentationError

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

exceptionTabError

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

exceptionSystemError

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

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

exceptionSystemExit

この例外はsys.exit() 関数によって送出されます。この例外が処理されなかった場合、スタックのトレースバックを全く表示することなく Python インタプリタは終了します。関連値が通常の整数であれば、システム終了ステータスを表します (exit() 関数に渡されます)。値がNone の場合、終了ステータスは 0 です。 (文字列のような) 他の型の場合、そのオブジェクトの値が表示され、終了ステータスは 1 になります。

この例外のインスタンスは属性code を持ちます。この値は終了ステータスまたはエラーメッセージ (標準ではNone) に設定されます。また、この例外は厳密にはエラーではないため、StandardError ではなくBaseException から派生しています。

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

この例外はException を捕まえるコードに間違って捕まえられないように、StandardErrorException からではなくBaseException を継承しています。これにより、この例外は着実に呼出し元の方に伝わっていってインタプリタを終了させます。

バージョン 2.5 で変更:BaseException を継承するように変更されました.

exceptionTypeError

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

exceptionUnboundLocalError

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

バージョン 2.0 で追加.

exceptionUnicodeError

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

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

encoding

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

reason

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

object

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

start

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

end

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

バージョン 2.0 で追加.

exceptionUnicodeEncodeError

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

バージョン 2.3 で追加.

exceptionUnicodeDecodeError

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

バージョン 2.3 で追加.

exceptionUnicodeTranslateError

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

バージョン 2.3 で追加.

exceptionValueError

演算子や関数が、正しい型だが適切でない値を持つ引数を受け取ったときや、IndexError のようなより詳細な例外では記述できない状況で送出されます。

exceptionVMSError

VMS においてのみ利用可能です。 VMS 特有のエラーが起こったときに送出されます。

exceptionWindowsError

Windows 特有のエラーか、エラー番号がerrno 値に対応しない場合に送出されます。winerrno およびstrerror の値は Windows プラットフォーム API の関数GetLastError()FormatMessage() の戻り値から生成されます。errno の値はwinerror の値を対応するerrno.h の値にマップしたものです。OSError のサブクラスです。

バージョン 2.0 で追加.

バージョン 2.5 で変更:以前のバージョンはGetLastError() のコードをerrno に入れていました。

exceptionZeroDivisionError

除算やモジュロ演算の第二引数が 0 であった場合に送出されます。関連値は文字列で、その演算における被演算子と演算子の型を示します。

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

exceptionWarning

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

exceptionUserWarning

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

exceptionDeprecationWarning

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

exceptionPendingDeprecationWarning

将来廃止される予定の機能に対する警告の基底クラスです。

exceptionSyntaxWarning

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

exceptionRuntimeWarning

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

exceptionFutureWarning

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

exceptionImportWarning

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

バージョン 2.5 で追加.

exceptionUnicodeWarning

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

バージョン 2.5 で追加.

exceptionBytesWarning

Base class for warnings related to bytes and bytearray.

バージョン 2.6 で追加.

6.1.例外のクラス階層

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

BaseException+--SystemExit+--KeyboardInterrupt+--GeneratorExit+--Exception+--StopIteration+--StandardError|+--BufferError|+--ArithmeticError||+--FloatingPointError||+--OverflowError||+--ZeroDivisionError|+--AssertionError|+--AttributeError|+--EnvironmentError||+--IOError||+--OSError||+--WindowsError(Windows)||+--VMSError(VMS)|+--EOFError|+--ImportError|+--LookupError||+--IndexError||+--KeyError|+--MemoryError|+--NameError||+--UnboundLocalError|+--ReferenceError|+--RuntimeError||+--NotImplementedError|+--SyntaxError||+--IndentationError||+--TabError|+--SystemError|+--TypeError|+--ValueError|+--UnicodeError|+--UnicodeDecodeError|+--UnicodeEncodeError|+--UnicodeTranslateError+--Warning+--DeprecationWarning+--PendingDeprecationWarning+--RuntimeWarning+--SyntaxWarning+--UserWarning+--FutureWarning+--ImportWarning+--UnicodeWarning+--BytesWarning