6. 組み込み例外¶
例外はクラスオブジェクトです。例外はモジュール exceptions
で定義されています。このモジュールを明示的にインポートする必要はありません。例外は exceptions
モジュールと同様に組み込み名前空間で与えられます。
try
文の中で、 except
節を使って特定の例外クラスについて記述した場合、その節は指定した例外クラスから派生したクラスも扱います (指定した例外クラスの派生元のクラスは含みません)。サブクラス化の関係にない 2 つの例外クラスは、それらが同じ名前だったとしても等しくなることはありません。
以下に列挙した組み込み例外はインタプリタや組み込み関数によって生成されます。特に注記しないかぎり、これらの例外はエラーの詳しい原因を示している、 "関連値 (associated value)" を持ちます。この値は文字列または複数の情報 (例えばエラーコードや、エラーコードを説明する文字列) を含むタプルです。この関連値は raise
文の 2 番目の引数です。例外が標準のルートクラスである BaseException
の派生クラスであれば、関連値は例外インスタンスの args
属性中に置かれます。
ユーザによるコードも組み込み例外を送出できます。これを使って、例外ハンドラをテストしたり、インタプリタが同じ例外を送出する状況と "ちょうど同じような" エラー条件であることを報告したりできます。しかし、ユーザのコードが適切でないエラーを送出するのを妨げる方法はないので注意してください。
組み込み例外クラスは新たな例外を定義するためにサブクラス化することができます。新しい例外は、Exception
クラスかそのサブクラスの一つから派生することをお勧めします。 BaseException
からは派生しないで下さい。例外を定義する上での詳しい情報は、 Python チュートリアルの ユーザー定義例外 の項目にあります。
以下の例外クラスは他の例外クラスの基底クラスとしてのみ使われます。
-
exception
BaseException
¶ 全ての組み込み例外のルートクラスです。ユーザ定義例外が直接このクラスを継承することは意図していません (そうした場合は
Exception
を使ってください)。このクラスに対してstr()
やunicode()
が呼ばれた場合、引数の文字列表現か、引数が無い時には空文字列が返されます。バージョン 2.5 で追加.
-
exception
Exception
¶ システム終了以外の全ての組み込み例外はこのクラスから導出されています。全てのユーザ定義例外もこのクラスの派生クラスであるべきです。
バージョン 2.5 で変更:
BaseException
を継承するように変更されました.
-
exception
StandardError
¶ StopIteration
,SystemExit
,KeyboardInterrupt
,SystemExit
以外の、全ての組み込み例外の基底クラスです。StandardError
自体はException
の派生クラスです。
-
exception
ArithmeticError
¶ 算術上の様々なエラーに対して送出される組み込み例外
OverflowError
,ZeroDivisionError
,FloatingPointError
の基底クラスです。
-
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
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
¶ コーデックがエンコードまたはデコードしようとしたオブジェクトです。
バージョン 2.0 で追加.
-
-
exception
UnicodeEncodeError
¶ Unicode 関連のエラーがエンコード中に発生した際に送出されます。
UnicodeError
のサブクラスです。バージョン 2.3 で追加.
-
exception
UnicodeDecodeError
¶ Unicode 関連のエラーがデコード中に発生した際に送出されます。
UnicodeError
のサブクラスです。バージョン 2.3 で追加.
-
exception
UnicodeTranslateError
¶ Unicode 関連のエラーがコード翻訳に発生した際に送出されます。
UnicodeError
のサブクラスです。バージョン 2.3 で追加.
-
exception
ValueError
¶ 演算子や関数が、正しい型だが適切でない値を持つ引数を受け取ったときや、
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