6.6。 組み込みの例外
例外はクラスオブジェクトである必要があります。 例外は、モジュール例外で定義されています。 このモジュールを明示的にインポートする必要はありません。例外は、 exceptions モジュールと同様に組み込みの名前空間で提供されます。
クラス例外の場合、特定のクラスに言及する exception 句を含む try ステートメントでは、その句はそのクラスから派生した例外クラスも処理します(ただし、[X224X ] it が派生します)。 サブクラス化によって関連付けられていない2つの例外クラスは、同じ名前であっても同等になることはありません。
以下にリストされている組み込み例外は、インタープリターまたは組み込み関数によって生成できます。 特に記載のない限り、エラーの詳細な原因を示す「関連値」があります。 これは、いくつかの情報項目(たとえば、エラーコードとコードを説明する文字列)を含む文字列またはタプルの場合があります。 関連する値は、 raise ステートメントの2番目の引数です。 例外クラスが標準ルートクラス BaseException から派生している場合、関連付けられた値は例外インスタンスのargs
属性として存在します。
ユーザーコードにより、組み込みの例外が発生する可能性があります。 これを使用して、例外ハンドラーをテストしたり、インタープリターが同じ例外を発生させた状況と「同じように」エラー状態を報告したりできます。 ただし、ユーザーコードが不適切なエラーを発生させるのを防ぐものは何もないことに注意してください。
組み込みの例外クラスをサブクラス化して、新しい例外を定義できます。 プログラマーは、 BaseException からではなく、 Exception クラスまたはそのサブクラスの1つから新しい例外を派生させることをお勧めします。 例外の定義の詳細については、Pythonチュートリアルのユーザー定義の例外を参照してください。
次の例外は、他の例外の基本クラスとしてのみ使用されます。
- exception exceptions.BaseException
すべての組み込み例外の基本クラス。 これは、ユーザー定義クラスによって直接継承されることを意図したものではありません(そのためには、 Exception を使用してください)。 このクラスのインスタンスで str()または unicode()が呼び出されると、インスタンスへの引数の表現が返されるか、存在する場合は空の文字列が返されます。引数なし。
バージョン2.5の新機能。
- args
例外コンストラクターに与えられた引数のタプル。 一部の組み込み例外( IOError など)は、特定の数の引数を予期し、このタプルの要素に特別な意味を割り当てますが、他の例外は通常、エラーメッセージを表示する単一の文字列でのみ呼び出されます。
- exception exceptions.Exception
すべての組み込みの、システムを終了しない例外は、このクラスから派生します。 すべてのユーザー定義の例外も、このクラスから派生する必要があります。
バージョン2.5で変更: BaseException から継承するように変更されました。
- exception exceptions.StandardError
- StopIteration 、 GeneratorExit 、 KeyboardInterrupt 、 SystemExit を除くすべての組み込み例外の基本クラス。 StandardError 自体は Exception から派生しています。
- exception exceptions.ArithmeticError
- さまざまな算術エラーに対して発生する組み込み例外の基本クラス: OverflowError 、 ZeroDivisionError 、 FloatingPointError 。
- exception exceptions.BufferError
- バッファ関連の操作が実行できない場合に発生します。
- exception exceptions.LookupError
- マッピングまたはシーケンスで使用されるキーまたはインデックスが無効な場合に発生する例外の基本クラス: IndexError 、 KeyError 。 これは、 codecs.lookup()によって直接発生させることができます。
- exception exceptions.EnvironmentError
Pythonシステムの外部で発生する可能性のある例外の基本クラス: IOError 、 OSError 。 このタイプの例外が2タプルで作成される場合、最初のアイテムはインスタンスの 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 exceptions.AssertionError
- assert ステートメントが失敗したときに発生します。
- exception exceptions.AttributeError
- 属性参照(属性参照を参照)または割り当てが失敗した場合に発生します。 (オブジェクトが属性参照または属性割り当てをまったくサポートしていない場合、 TypeError が発生します。)
- exception exceptions.EOFError
- 組み込み関数( input()または raw_input())の1つが、データを読み取らずにファイルの終わり条件(EOF)に達したときに発生します。 (注: file.read()および file.readline()メソッドは、EOFに達すると、空の文字列を返します。)
- exception exceptions.FloatingPointError
- 浮動小数点演算が失敗したときに発生します。 この例外は常に定義されていますが、Pythonが
--with-fpectl
オプションで構成されている場合、またはWANT_SIGFPE_HANDLER
シンボルがpyconfig.h
ファイルで定義されている場合にのみ発生します。
- exception exceptions.GeneratorExit
ジェネレーター 'の
close()
メソッドが呼び出されたときに発生します。 技術的にはエラーではないため、 StandardError ではなく BaseException から直接継承します。バージョン2.5の新機能。
バージョン2.6で変更: BaseException から継承するように変更されました。
- exception exceptions.IOError
I / O操作( print ステートメント、組み込みの open()関数、またはファイルオブジェクトのメソッドなど)がI / O関連で失敗した場合に発生します理由、例えば、「ファイルが見つかりません」または「ディスクがいっぱいです」。
このクラスは、 EnvironmentError から派生しています。 例外インスタンス属性の詳細については、上記の説明を参照してください。
バージョン2.6で変更:これを基本クラスとして使用するように socket.error を変更しました。
- exception exceptions.ImportError
- import ステートメントがモジュール定義を見つけられなかった場合、または
from ... import
がインポートされる名前を見つけられなかった場合に発生します。
- exception exceptions.IndexError
- シーケンスの添え字が範囲外の場合に発生します。 (スライスインデックスは、許可された範囲内に収まるようにサイレントに切り捨てられます。インデックスが単純な整数でない場合、 TypeError が発生します。)
- exception exceptions.KeyError
- マッピング(辞書)キーが既存のキーのセットに見つからない場合に発生します。
- exception exceptions.KeyboardInterrupt
ユーザーが割り込みキー(通常は Control-C または Delete )を押すと発生します。 実行中、割り込みのチェックが定期的に行われます。 組み込み関数 input()または raw_input()が入力を待機しているときに入力された割り込みも、この例外を発生させます。 例外は BaseException から継承され、 Exception をキャッチするコードによって誤ってキャッチされないようにし、インタプリタが終了しないようにします。
バージョン2.5で変更: BaseException から継承するように変更されました。
- exception exceptions.MemoryError
- 操作のメモリが不足したときに発生しますが、状況は(一部のオブジェクトを削除することで)救済される可能性があります。 関連する値は、どの種類の(内部)操作でメモリが不足したかを示す文字列です。 基盤となるメモリ管理アーキテクチャ(Cの
malloc()
関数)のため、インタプリタがこの状況から完全に回復できるとは限らないことに注意してください。 それでも、プログラムの暴走が原因である場合に備えて、スタックトレースバックを出力できるように、例外が発生します。
- exception exceptions.NameError
- ローカル名またはグローバル名が見つからない場合に発生します。 これは、修飾されていない名前にのみ適用されます。 関連する値は、見つからなかった名前を含むエラーメッセージです。
- exception exceptions.NotImplementedError
この例外は、 RuntimeError から派生しています。 ユーザー定義の基本クラスでは、メソッドをオーバーライドするために派生クラスが必要な場合、抽象メソッドはこの例外を発生させる必要があります。
バージョン1.5.2の新機能。
- exception exceptions.OSError
この例外は、 EnvironmentError から派生しています。 関数がシステム関連のエラーを返したときに発生します(不正な引数タイプやその他の偶発的なエラーではありません)。 errno 属性は、
errno
からの数値エラーコードであり、strerror
属性は、C関数perror()
によって出力されるように、対応する文字列です。 。 モジュール errno を参照してください。このモジュールには、基盤となるオペレーティングシステムによって定義されたエラーコードの名前が含まれています。ファイルシステムパスを含む例外(
chdir()
やunlink()
など)の場合、例外インスタンスには3番目の属性filename
が含まれます。これは、に渡されるファイル名です。関数。バージョン1.5.2の新機能。
- exception exceptions.OverflowError
- 算術演算の結果が大きすぎて表現できない場合に発生します。 これは、長整数(あきらめるよりも MemoryError を発生させる)や、代わりに長整数を返すプレーン整数を使用するほとんどの操作では発生しません。 Cでは浮動小数点例外処理が標準化されていないため、ほとんどの浮動小数点演算もチェックされません。
- exception exceptions.ReferenceError
この例外は、 weakref.proxy()関数によって作成された弱参照プロキシが、ガベージコレクション後に指示対象の属性にアクセスするために使用される場合に発生します。 弱参照の詳細については、 weakref モジュールを参照してください。
バージョン2.2の新機能:以前は weakref.ReferenceError 例外として知られていました。
- exception exceptions.RuntimeError
- 他のどのカテゴリにも該当しないエラーが検出された場合に発生します。 関連する値は、何が正確に間違っていたかを示す文字列です。
- exception exceptions.StopIteration
イテレータ 'の next()メソッドによって発生し、それ以上の値がないことを通知します。 これは、通常のアプリケーションではエラーとは見なされないため、 StandardError ではなく Exception から派生します。
バージョン2.2の新機能。
- exception exceptions.SyntaxError
パーサーで構文エラーが発生したときに発生します。 これは、 import ステートメント、 exec ステートメント、組み込み関数 eval()または input()の呼び出しで発生する可能性があります。 、または最初のスクリプトまたは標準入力を読み取るとき(これもインタラクティブに)。
このクラスのインスタンスには、詳細に簡単にアクセスできるように、属性
filename
、lineno
、offset
、およびtext
があります。 例外インスタンスの str()は、メッセージのみを返します。
- exception exceptions.IndentationError
- 誤ったインデントに関連する構文エラーの基本クラス。 これは SyntaxError のサブクラスです。
- exception exceptions.TabError
- インデントにタブとスペースの一貫性のない使用が含まれている場合に発生します。 これは IndentationError のサブクラスです。
- exception exceptions.SystemError
インタプリタが内部エラーを見つけたときに発生しますが、状況はそれほど深刻ではなく、すべての希望を放棄することになります。 関連する値は、何がうまくいかなかったかを示す文字列です(低レベルの用語で)。
これは、Pythonインタープリターの作成者または保守者に報告する必要があります。 Pythonインタープリターのバージョン(
sys.version
。インタラクティブなPythonセッションの開始時にも出力されます)、正確なエラーメッセージ(例外に関連付けられた値)、および可能であればプログラムのソースを必ず報告してください。それがエラーを引き起こしました。
- exception exceptions.SystemExit
この例外は、 sys.exit()関数によって発生します。 処理されない場合、Pythonインタープリターは終了します。 スタックトレースバックは出力されません。 関連する値が単純な整数の場合、システムの終了ステータスを指定します(Cの
exit()
関数に渡されます)。None
の場合、終了ステータスはゼロです。 別のタイプ(文字列など)がある場合、オブジェクトの値が出力され、終了ステータスは1になります。インスタンスには、提案された終了ステータスまたはエラーメッセージ(デフォルトは
None
)に設定された属性code
があります。 また、この例外は、技術的にはエラーではないため、 StandardError ではなく、 BaseException から直接派生します。sys.exit()の呼び出しは例外に変換されるため、クリーンアップハンドラー( try ステートメントの finally 句)を実行できます。デバッガーは、制御を失うリスクを冒すことなくスクリプトを実行できます。 os._exit()関数は、すぐに終了することが絶対に確実に必要な場合に使用できます(たとえば、 os.fork()の呼び出し後の子プロセスで)。
例外は、 StandardError または Exception ではなく BaseException を継承するため、 Exception をキャッチするコードによって誤ってキャッチされることはありません。 これにより、例外が適切に伝播され、インタプリタが終了します。
バージョン2.5で変更: BaseException から継承するように変更されました。
- exception exceptions.TypeError
- 不適切なタイプのオブジェクトに操作または関数が適用されたときに発生します。 関連する値は、タイプの不一致に関する詳細を示す文字列です。
- exception exceptions.UnboundLocalError
関数またはメソッドでローカル変数が参照されたが、その変数に値がバインドされていない場合に発生します。 これは NameError のサブクラスです。
バージョン2.0の新機能。
- exception exceptions.UnicodeError
Unicode関連のエンコードまたはデコードエラーが発生したときに発生します。 ValueError のサブクラスです。
UnicodeError には、エンコードまたはデコードエラーを説明する属性があります。 たとえば、
err.object[err.start:err.end]
は、コーデックが失敗した特定の無効な入力を提供します。- encoding
エラーを発生させたエンコーディングの名前。
- reason
特定のコーデックエラーを説明する文字列。
- object
コーデックがエンコードまたはデコードしようとしたオブジェクト。
- start
オブジェクト内の無効なデータの最初のインデックス。
- end
オブジェクトの最後の無効なデータの後のインデックス。
バージョン2.0の新機能。
- exception exceptions.UnicodeEncodeError
エンコード中にUnicode関連のエラーが発生した場合に発生します。 これは UnicodeError のサブクラスです。
バージョン2.3の新機能。
- exception exceptions.UnicodeDecodeError
デコード中にUnicode関連のエラーが発生した場合に発生します。 これは UnicodeError のサブクラスです。
バージョン2.3の新機能。
- exception exceptions.UnicodeTranslateError
翻訳中にUnicode関連のエラーが発生した場合に発生します。 これは UnicodeError のサブクラスです。
バージョン2.3の新機能。
- exception exceptions.ValueError
- 操作または関数が正しい型であるが不適切な値の引数を受け取り、 IndexError などのより正確な例外によって状況が記述されていない場合に発生します。
- exception exceptions.VMSError
- VMSでのみ使用できます。 VMS固有のエラーが発生したときに発生します。
- exception exceptions.WindowsError
Windows固有のエラーが発生した場合、またはエラー番号が
errno
の値に対応していない場合に発生します。winerror
およびstrerror
の値は、WindowsプラットフォームAPIのGetLastError()
およびFormatMessage()
関数の戻り値から作成されます。 errno 値は、winerror
値を対応するerrno.h
値にマップします。 これは OSError のサブクラスです。バージョン2.0の新機能。
バージョン2.5で変更:以前のバージョンでは、
GetLastError()
コードが errno に配置されていました。
- exception exceptions.ZeroDivisionError
- 除算またはモジュロ演算の2番目の引数がゼロの場合に発生します。 関連する値は、オペランドのタイプと演算を示す文字列です。
次の例外は警告カテゴリとして使用されます。 詳細については、警告モジュールを参照してください。
- exception exceptions.Warning
- 警告カテゴリの基本クラス。
- exception exceptions.UserWarning
- ユーザーコードによって生成される警告の基本クラス。
- exception exceptions.DeprecationWarning
- 非推奨の機能に関する警告の基本クラス。
- exception exceptions.PendingDeprecationWarning
- 将来非推奨になる機能に関する警告の基本クラス。
- exception exceptions.SyntaxWarning
- 疑わしい構文に関する警告の基本クラス。
- exception exceptions.RuntimeWarning
- 疑わしい実行時の動作に関する警告の基本クラス。
- exception exceptions.FutureWarning
- 将来意味的に変更される構造に関する警告の基本クラス。
- exception exceptions.ImportWarning
モジュールのインポートで発生する可能性のある間違いに関する警告の基本クラス。
バージョン2.5の新機能。
- exception exceptions.UnicodeWarning
Unicodeに関連する警告の基本クラス。
バージョン2.5の新機能。
- exception exceptions.BytesWarning
バイトおよびバイト配列に関連する警告の基本クラス。
バージョン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