6. 組み込み例外
***************

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

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

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

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

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

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

exception BaseException

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

   バージョン 2.5 で追加.

   args

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

exception Exception

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

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

exception StandardError

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

exception ArithmeticError

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

exception BufferError

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

exception LookupError

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

exception EnvironmentError

   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" がコンストラクタに与えた引数をそのままタプルの形
   で含んでいます。

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

exception AssertionError

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

exception AttributeError

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

exception EOFError

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

exception FloatingPointError

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

exception GeneratorExit

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

   バージョン 2.5 で追加.

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

exception IOError

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

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

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

exception ImportError

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

exception IndexError

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

exception KeyError

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

exception KeyboardInterrupt

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

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

exception MemoryError

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

exception NameError

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

exception NotImplementedError

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

   バージョン 1.5.2 で追加.

exception OSError

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

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

   バージョン 1.5.2 で追加.

exception OverflowError

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

exception ReferenceError

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

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

exception RuntimeError

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

exception StopIteration

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

   バージョン 2.2 で追加.

exception SyntaxError

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

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

exception IndentationError

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

exception TabError

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

exception SystemError

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

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

exception SystemExit

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

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

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

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

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

exception TypeError

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

exception UnboundLocalError

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

   バージョン 2.0 で追加.

exception UnicodeError

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

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

   encoding

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

   reason

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

   object

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

   start

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

   end

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

   バージョン 2.0 で追加.

exception UnicodeEncodeError

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

   バージョン 2.3 で追加.

exception UnicodeDecodeError

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

   バージョン 2.3 で追加.

exception UnicodeTranslateError

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

   バージョン 2.3 で追加.

exception ValueError

   Raised when an operation or function receives an argument that has
   the right type but an inappropriate value, and the situation is not
   described by a more precise exception such as "IndexError".

exception VMSError

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

exception WindowsError

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

   バージョン 2.0 で追加.

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

exception ZeroDivisionError

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

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

exception Warning

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

exception UserWarning

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

exception DeprecationWarning

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

exception PendingDeprecationWarning

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

exception SyntaxWarning

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

exception RuntimeWarning

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

exception FutureWarning

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

exception ImportWarning

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

   バージョン 2.5 で追加.

exception UnicodeWarning

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

   バージョン 2.5 で追加.

exception BytesWarning

   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
