raise_stmt | ::= | "raise" [expression ["," expression ["," expression]]] |
式を伴わない場合、raise は現在のスコープで最終的に有効に なっている例外を再送出します。そのような例外が現在のスコープで アクティブでない場合、TypeError 例外が送出されて、 これがエラーであることを示します (IDLE で実行した場合は、 代わりに exceptionQueue.Empty 例外を送出します)。
それ以外の場合、raise は式を値評価して、三つのオブジェクトを
取得します。このとき、None
を省略された式の値として使います。
最初の二つのオブジェクトは、例外の 型 (type) と
例外の 値 (value) を決定するために用いられます。
最初のオブジェクトがインスタンスである場合、例外の型はインスタンス
のクラスになり、インスタンス自体が例外の値になります。このとき
第二のオブジェクトは None
でなければなりません。
最初のオブジェクトがクラスの場合、例外の型になります。
第二のオブジェクトは、例外の値を決めるために使われます:
第二のオブジェクトがインスタンスならば、そのインスタンスが
例外の値になります。第二のオブジェクトがタプルの場合、
クラスのコンストラクタに対する引数リストとして使われます;
None
なら、空の引数リストとして扱われ、それ以外の型
ならコンストラクタに対する単一の引数として扱われます。
このようにしてコンストラクタを呼び出して生成したインスタンス
が例外の値になります。
第三のオブジェクトが存在し、かつ None
でなければ、
オブジェクトはトレースバック オブジェクト
でなければなりません ( 3.2 節参照)。また、
例外が発生した場所は現在の処理位置に置き換えられます。
第三のオブジェクトが存在し、オブジェクトがトレースバック
オブジェクトでも None
でもなければ、TypeError
例外が送出されます。raise の三連式型は、except
節から透過的に例外を再送出するのに便利ですが、再送出すべき
例外が現在のスコープで発生した最も新しいアクティブな例外で
ある場合には、式なしの raise を使うよう推奨します。
例外に関する追加情報は 4.2 節にあります。また、 例外処理に関する情報は 7.4 節にあります。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。