組み込みの例外
Pythonでは、すべての例外は BaseException から派生したクラスのインスタンスである必要があります。 特定のクラスに言及する except 句を含む try ステートメントでは、その句はそのクラスから派生した例外クラスも処理します(ただし、 it の元となる例外クラスは処理しません)。 ] 導出されます)。 サブクラス化によって関連付けられていない2つの例外クラスは、同じ名前であっても同等になることはありません。
以下にリストされている組み込み例外は、インタープリターまたは組み込み関数によって生成できます。 特に記載のない限り、エラーの詳細な原因を示す「関連値」があります。 これは、文字列またはいくつかの情報項目のタプル(たとえば、エラーコードとコードを説明する文字列)の場合があります。 関連する値は通常、引数として例外クラスのコンストラクターに渡されます。
ユーザーコードにより、組み込みの例外が発生する可能性があります。 これを使用して、例外ハンドラーをテストしたり、インタープリターが同じ例外を発生させた状況と「同じように」エラー状態を報告したりできます。 ただし、ユーザーコードが不適切なエラーを発生させるのを防ぐものは何もないことに注意してください。
組み込みの例外クラスをサブクラス化して、新しい例外を定義できます。 プログラマーは、 BaseException からではなく、 Exception クラスまたはそのサブクラスの1つから新しい例外を派生させることをお勧めします。 例外の定義の詳細については、Pythonチュートリアルのユーザー定義の例外を参照してください。
exception または finally 句で例外を発生(または再発生)すると、__context__
は最後にキャッチされた例外に自動的に設定されます。 新しい例外が処理されない場合、最終的に表示されるトレースバックには、元の例外と最後の例外が含まれます。
(裸のraise
を使用して現在処理されている例外を再発生させるのではなく)新しい例外を発生させる場合、 from を[ X219X]レイズ:
from に続く式は、例外またはNone
である必要があります。 発生した例外では、__cause__
として設定されます。 __cause__
を設定すると、__suppress_context__
属性も暗黙的にTrue
に設定されるため、raise new_exc from None
を使用すると、表示目的で古い例外が新しい例外に効果的に置き換えられます(例: KeyError を AttributeError )に変換しますが、デバッグ時のイントロスペクションのために__context__
で使用可能な古い例外を残します。
デフォルトのトレースバック表示コードには、例外自体のトレースバックに加えて、これらの連鎖例外が表示されます。 __cause__
で明示的に連鎖された例外は、存在する場合は常に表示されます。 __context__
の暗黙的に連鎖された例外は、__cause__
が None であり、__suppress_context__
がfalseの場合にのみ表示されます。
いずれの場合も、チェーンされた例外の後に例外自体が常に表示されるため、トレースバックの最後の行には、発生した最後の例外が常に表示されます。
基本クラス
次の例外は、主に他の例外の基本クラスとして使用されます。
- exception BaseException
すべての組み込み例外の基本クラス。 これは、ユーザー定義クラスによって直接継承されることを意図したものではありません(そのためには、 Exception を使用してください)。 このクラスのインスタンスで str()が呼び出されると、インスタンスへの引数の表現が返されるか、引数がない場合は空の文字列が返されます。
- args
例外コンストラクターに与えられた引数のタプル。 一部の組み込み例外( OSError など)は、特定の数の引数を予期し、このタプルの要素に特別な意味を割り当てますが、他の例外は通常、エラーメッセージを表示する単一の文字列でのみ呼び出されます。
- with_traceback(tb)
このメソッドは、 tb を例外の新しいトレースバックとして設定し、例外オブジェクトを返します。 これは通常、次のような例外処理コードで使用されます。
- exception Exception
- すべての組み込みの、システムを終了しない例外は、このクラスから派生します。 すべてのユーザー定義の例外も、このクラスから派生する必要があります。
- exception ArithmeticError
- さまざまな算術エラーに対して発生する組み込み例外の基本クラス: OverflowError 、 ZeroDivisionError 、 FloatingPointError 。
- exception BufferError
- バッファ関連の操作が実行できない場合に発生します。
- exception LookupError
- マッピングまたはシーケンスで使用されるキーまたはインデックスが無効な場合に発生する例外の基本クラス: IndexError 、 KeyError 。 これは、 codecs.lookup()によって直接発生させることができます。
具体的な例外
次の例外は、通常発生する例外です。
- exception AssertionError
- assert ステートメントが失敗したときに発生します。
- exception AttributeError
- 属性参照(属性参照を参照)または割り当てが失敗した場合に発生します。 (オブジェクトが属性参照または属性割り当てをまったくサポートしていない場合、 TypeError が発生します。)
- exception EOFError
- input()関数がデータを読み取らずにファイルの終わり条件(EOF)に達したときに発生します。 (注:
io.IOBase.read()
および io.IOBase.readline()メソッドは、EOFに達すると、空の文字列を返します。)
- exception FloatingPointError
- 現在は使用されていません。
- exception GeneratorExit
- ジェネレーターまたはコルーチンが閉じているときに発生します。 generator.close()および coroutine.close()を参照してください。 技術的にはエラーではないため、 Exception ではなく BaseException から直接継承します。
- exception ImportError
import ステートメントでモジュールのロードに問題が発生した場合に発生します。
from ... import
の「リストから」の名前が見つからない場合にも発生します。name
およびpath
属性は、コンストラクターへのキーワードのみの引数を使用して設定できます。 設定すると、インポートしようとしたモジュールの名前と、例外をトリガーしたファイルへのパスをそれぞれ表します。バージョン3.3で変更:
name
およびpath
属性が追加されました。
- exception ModuleNotFoundError
モジュールが見つからなかったときに import によって発生する ImportError のサブクラス。
None
が sys.modules で見つかった場合にも発生します。バージョン3.6の新機能。
- exception IndexError
- シーケンスの添え字が範囲外の場合に発生します。 (スライスインデックスは、許可された範囲内に収まるようにサイレントに切り捨てられます。インデックスが整数でない場合、 TypeError が発生します。)
- exception KeyError
- マッピング(辞書)キーが既存のキーのセットに見つからない場合に発生します。
- exception KeyboardInterrupt
- ユーザーが割り込みキー(通常は Control-C または Delete )を押すと発生します。 実行中、割り込みのチェックが定期的に行われます。 例外は BaseException から継承され、 Exception をキャッチするコードによって誤ってキャッチされないようにし、インタプリタが終了しないようにします。
- exception MemoryError
- 操作のメモリが不足したときに発生しますが、状況は(一部のオブジェクトを削除することで)救済される可能性があります。 関連する値は、どの種類の(内部)操作でメモリが不足したかを示す文字列です。 基盤となるメモリ管理アーキテクチャ(Cの
malloc()
関数)のため、インタプリタがこの状況から完全に回復できるとは限らないことに注意してください。 それでも、プログラムの暴走が原因である場合に備えて、スタックトレースバックを出力できるように、例外が発生します。
- exception NameError
- ローカル名またはグローバル名が見つからない場合に発生します。 これは、修飾されていない名前にのみ適用されます。 関連する値は、見つからなかった名前を含むエラーメッセージです。
- exception NotImplementedError
この例外は、 RuntimeError から派生しています。 ユーザー定義の基本クラスでは、メソッドをオーバーライドするために派生クラスが必要な場合、または実際の実装を追加する必要があることを示すためにクラスが開発されているときに、抽象メソッドでこの例外を発生させる必要があります。
ノート
演算子またはメソッドがまったくサポートされないことを示すために使用しないでください。その場合、演算子/メソッドを未定義のままにするか、サブクラスの場合は None に設定してください。
ノート
NotImplementedError
とNotImplemented
は、名前と目的が似ていても互換性がありません。 いつ使用するかについては、 NotImplemented を参照してください。
- exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]]) この例外は、システム関数が「ファイルが見つかりません」や「ディスクがいっぱいです」などのI / O障害を含む、システム関連のエラーを返す場合に発生します(不正な引数タイプやその他の偶発的なエラーではありません)。
コンストラクターの2番目の形式は、以下で説明する対応する属性を設定します。 指定しない場合、属性のデフォルトは None です。 下位互換性のために、3つの引数が渡された場合、 args 属性には、最初の2つのコンストラクター引数の2タプルのみが含まれます。
以下の OS例外で説明されているように、コンストラクタは実際には OSError のサブクラスを返すことがよくあります。 特定のサブクラスは、最終的な errno 値によって異なります。 この動作は、 OSError を直接またはエイリアスを介して構築する場合にのみ発生し、サブクラス化時に継承されません。
- errno
C変数
errno
からの数値エラーコード。
- winerror
Windowsでは、これによりネイティブのWindowsエラーコードが表示されます。 errno 属性は、POSIX用語で、そのネイティブエラーコードのおおよその変換です。
Windowsでは、 winerror コンストラクター引数が整数の場合、 errno 属性はWindowsエラーコードから決定され、 errno 引数は無視されます。 他のプラットフォームでは、 winerror 引数は無視され、 winerror 属性は存在しません。
- strerror
オペレーティングシステムによって提供される、対応するエラーメッセージ。 POSIXではC関数
perror()
、WindowsではFormatMessage()
でフォーマットされています。
- filename
filename2 ファイルシステムパス( open()や os.unlink()など)を含む例外の場合、 filename は関数に渡されるファイル名です。 2つのファイルシステムパスを含む関数( os.rename()など)の場合、 filename2 は、関数に渡される2番目のファイル名に対応します。
バージョン3.3で変更: EnvironmentError 、 IOError 、 WindowsError 、 socket.error 、 select。 error と
mmap.error
が OSError にマージされ、コンストラクターがサブクラスを返す場合があります。バージョン3.4で変更: filename 属性は、ファイルシステムエンコーディングにエンコードまたはデコードされた名前ではなく、関数に渡された元のファイル名になりました。 また、 filename2 コンストラクターの引数と属性が追加されました。
- exception OverflowError
- 算術演算の結果が大きすぎて表現できない場合に発生します。 これは整数では発生しません(あきらめるよりも MemoryError を発生させます)。 ただし、歴史的な理由から、必要な範囲外の整数に対してOverflowErrorが発生することがあります。 Cでは浮動小数点例外処理が標準化されていないため、ほとんどの浮動小数点演算はチェックされません。
- exception RecursionError
この例外は、 RuntimeError から派生しています。 インタプリタが最大再帰深度( sys.getrecursionlimit()を参照)を超えたことを検出すると発生します。
バージョン3.5の新機能:以前は、プレーンな RuntimeError が発生していました。
- exception ReferenceError
- この例外は、 weakref.proxy()関数によって作成された弱参照プロキシが、ガベージコレクション後に指示対象の属性にアクセスするために使用される場合に発生します。 弱参照の詳細については、 weakref モジュールを参照してください。
- exception RuntimeError
- 他のどのカテゴリにも該当しないエラーが検出された場合に発生します。 関連する値は、何が正確に間違っていたかを示す文字列です。
- exception StopIteration
組み込み関数 next()および iterator ' s __ next __()メソッドによって生成され、イテレーターによって生成されたアイテムがこれ以上ないことを通知します。
例外オブジェクトには単一の属性
value
があり、これは例外を作成するときに引数として指定され、デフォルトは None です。ジェネレーターまたはコルーチン関数が戻ると、新しい StopIteration インスタンスが発生し、関数によって返された値が
value
として使用されます。例外のコンストラクターへのパラメーター。ジェネレータコードが直接的または間接的に StopIteration を発生させると、 RuntimeError に変換されます( StopIteration を新しい例外の原因として保持します)。
バージョン3.3で変更:
value
属性と、それを使用して値を返すジェネレーター関数の機能が追加されました。バージョン3.5で変更:
from __future__ import generator_stop
を介してRuntimeErrorトランスフォーメーションが導入されました。 PEP479 を参照してください。バージョン3.7で変更:すべてのコードで PEP 479 をデフォルトで有効にします:ジェネレーターで発生した StopIteration エラーは[ X166X]ランタイムエラー。
- exception StopAsyncIteration
反復を停止するには、非同期イテレータオブジェクトの
__anext__()
メソッドによって発生する必要があります。バージョン3.5の新機能。
- exception SyntaxError
パーサーで構文エラーが発生したときに発生します。 これは、 import ステートメント、組み込み関数 exec()または eval()の呼び出し、または最初のスクリプトを読み取るときに発生する可能性があります。標準入力(インタラクティブにも)。
例外インスタンスの str()は、エラーメッセージのみを返します。
- filename
構文エラーが発生したファイルの名前。
- lineno
エラーが発生したファイルの行番号。 これは1インデックスです。ファイルの最初の行の
lineno
は1です。
- offset
エラーが発生した行の列。 これは1インデックスです。行の最初の文字の
offset
は1です。
- text
エラーに関係するソースコードテキスト。
- exception IndentationError
- 誤ったインデントに関連する構文エラーの基本クラス。 これは SyntaxError のサブクラスです。
- exception TabError
- インデントにタブとスペースの一貫性のない使用が含まれている場合に発生します。 これは IndentationError のサブクラスです。
- exception SystemError
インタプリタが内部エラーを見つけたときに発生しますが、状況はそれほど深刻ではなく、すべての希望を放棄することになります。 関連する値は、何がうまくいかなかったかを示す文字列です(低レベルの用語で)。
これは、Pythonインタープリターの作成者または保守者に報告する必要があります。 Pythonインタープリターのバージョン(
sys.version
。インタラクティブなPythonセッションの開始時にも出力されます)、正確なエラーメッセージ(例外に関連付けられた値)、および可能であればプログラムのソースを必ず報告してください。それがエラーを引き起こしました。
- exception SystemExit
この例外は、 sys.exit()関数によって発生します。 Exception ではなく BaseException を継承するため、 Exception をキャッチするコードによって誤ってキャッチされることはありません。 これにより、例外が適切に伝播され、インタプリタが終了します。 処理されない場合、Pythonインタープリターは終了します。 スタックトレースバックは出力されません。 コンストラクターは、 sys.exit()に渡されたものと同じオプションの引数を受け入れます。 値が整数の場合、システムの終了ステータスを指定します(Cの
exit()
関数に渡されます)。None
の場合、終了ステータスはゼロです。 別のタイプ(文字列など)がある場合、オブジェクトの値が出力され、終了ステータスは1になります。sys.exit()の呼び出しは例外に変換されるため、クリーンアップハンドラー( try ステートメントの finally 句)を実行できます。デバッガーは、制御を失うリスクを冒すことなくスクリプトを実行できます。 os._exit()関数は、すぐに終了することが絶対に確実に必要な場合に使用できます(たとえば、 os.fork()の呼び出し後の子プロセスで)。
- code
コンストラクターに渡される終了ステータスまたはエラーメッセージ。 (デフォルトは
None
です。)
- exception TypeError
不適切なタイプのオブジェクトに操作または関数が適用されたときに発生します。 関連する値は、タイプの不一致に関する詳細を示す文字列です。
この例外は、オブジェクトに対して試行された操作がサポートされていないことを示すためにユーザーコードによって発生する可能性があり、サポートされることを意図していません。 オブジェクトが特定の操作をサポートすることを意図しているが、まだ実装を提供していない場合、 NotImplementedError が発生する適切な例外です。
間違ったタイプの引数を渡す(例: int が予期されるときに list を渡すと、 TypeError になりますが、間違った値で引数を渡すと(例: 予想される境界外の数値)は、 ValueError になるはずです。
- exception UnboundLocalError
- 関数またはメソッドでローカル変数が参照されたが、その変数に値がバインドされていない場合に発生します。 これは NameError のサブクラスです。
- exception UnicodeError
Unicode関連のエンコードまたはデコードエラーが発生したときに発生します。 ValueError のサブクラスです。
UnicodeError には、エンコードまたはデコードエラーを説明する属性があります。 たとえば、
err.object[err.start:err.end]
は、コーデックが失敗した特定の無効な入力を提供します。- encoding
エラーを発生させたエンコーディングの名前。
- reason
特定のコーデックエラーを説明する文字列。
- object
コーデックがエンコードまたはデコードしようとしたオブジェクト。
- start
オブジェクト内の無効なデータの最初のインデックス。
- end
オブジェクトの最後の無効なデータの後のインデックス。
- exception UnicodeEncodeError
- エンコード中にUnicode関連のエラーが発生した場合に発生します。 これは UnicodeError のサブクラスです。
- exception UnicodeDecodeError
- デコード中にUnicode関連のエラーが発生した場合に発生します。 これは UnicodeError のサブクラスです。
- exception UnicodeTranslateError
- 翻訳中にUnicode関連のエラーが発生した場合に発生します。 これは UnicodeError のサブクラスです。
- exception ValueError
- 操作または関数が正しい型であるが不適切な値の引数を受け取り、 IndexError などのより正確な例外によって状況が記述されていない場合に発生します。
- exception ZeroDivisionError
- 除算またはモジュロ演算の2番目の引数がゼロの場合に発生します。 関連する値は、オペランドのタイプと演算を示す文字列です。
以下の例外は、以前のバージョンとの互換性のために保持されています。 Python 3.3以降、これらは OSError のエイリアスです。
- exception EnvironmentError
- exception IOError
- exception WindowsError
- Windowsでのみ使用できます。
OSの例外
次の例外は OSError のサブクラスであり、システムエラーコードに応じて発生します。
- exception BlockingIOError
操作がオブジェクトをブロックするときに発生します(例: ソケット)非ブロッキング操作用に設定されています。
errno
EAGAIN
、EALREADY
、EWOULDBLOCK
、EINPROGRESS
に対応します。OSError の属性に加えて、 BlockingIOError にはもう1つの属性を含めることができます。
- characters_written
ストリームがブロックされる前にストリームに書き込まれた文字数を含む整数。 この属性は、 io モジュールのバッファリングされたI / Oクラスを使用する場合に使用できます。
- exception ChildProcessError
- 子プロセスの操作が失敗したときに発生します。
errno
ECHILD
に対応します。
- exception ConnectionError
接続関連の問題の基本クラス。
サブクラスは、 BrokenPipeError 、 ConnectionAbortedError 、 ConnectionRefusedError 、および ConnectionResetError です。
- exception BrokenPipeError
- ConnectionError のサブクラス。もう一方の端が閉じているときにパイプに書き込もうとしたとき、または書き込みのためにシャットダウンされたソケットに書き込もうとしたときに発生します。
errno
EPIPE
およびESHUTDOWN
に対応します。
- exception ConnectionAbortedError
- ConnectionError のサブクラス。接続の試行が、ピアによって中止されたときに発生します。
errno
ECONNABORTED
に対応します。
- exception ConnectionRefusedError
- ConnectionError のサブクラス。接続の試行が、ピアによって拒否されたときに発生します。
errno
ECONNREFUSED
に対応します。
- exception ConnectionResetError
- ConnectionError のサブクラスで、接続がピアによってリセットされたときに発生します。
errno
ECONNRESET
に対応します。
- exception FileExistsError
- すでに存在するファイルまたはディレクトリを作成しようとしたときに発生します。
errno
EEXIST
に対応します。
- exception FileNotFoundError
- ファイルまたはディレクトリが要求されたが存在しない場合に発生します。
errno
ENOENT
に対応します。
- exception InterruptedError
システムコールが着信信号によって中断されたときに発生します。
errno
EINTR に対応します。バージョン3.5での変更: Pythonは、シグナルハンドラーが例外を発生させた場合を除いて、syscallがシグナルによって中断されたときにシステムコールを再試行するようになりました( PEP 475 を参照)理論的根拠)、 InterruptedError を発生させる代わりに。
- exception IsADirectoryError
- ディレクトリでファイル操作( os.remove()など)が要求されたときに発生します。
errno
EISDIR
に対応します。
- exception NotADirectoryError
- ディレクトリ以外のものに対してディレクトリ操作( os.listdir()など)が要求された場合に発生します。
errno
ENOTDIR
に対応します。
- exception PermissionError
- 適切なアクセス権(ファイルシステムのアクセス許可など)なしで操作を実行しようとしたときに発生します。
errno
EACCES
およびEPERM
に対応します。
- exception ProcessLookupError
- 特定のプロセスが存在しない場合に発生します。
errno
ESRCH
に対応します。
- exception TimeoutError
- システム機能がシステムレベルでタイムアウトしたときに発生します。
errno
ETIMEDOUT
に対応します。
バージョン3.3の新機能:上記のすべての OSError サブクラスが追加されました。
警告
次の例外は警告カテゴリとして使用されます。 詳細については、警告カテゴリのドキュメントを参照してください。
- exception Warning
- 警告カテゴリの基本クラス。
- exception UserWarning
- ユーザーコードによって生成される警告の基本クラス。
- exception DeprecationWarning
- 非推奨の機能に関する警告が他のPython開発者を対象としている場合の、それらの警告の基本クラス。
- exception PendingDeprecationWarning
廃止され、将来廃止される予定であるが、現時点では廃止されていない機能に関する警告の基本クラス。
このクラスは、今後の非推奨の可能性について警告を発することはまれであるため、めったに使用されません。 DeprecationWarning は、すでにアクティブな非推奨に推奨されます。
- exception SyntaxWarning
- 疑わしい構文に関する警告の基本クラス。
- exception RuntimeWarning
- 疑わしい実行時の動作に関する警告の基本クラス。
- exception FutureWarning
- 非推奨の機能に関する警告の基本クラス。これらの警告は、Pythonで記述されたアプリケーションのエンドユーザーを対象としています。
- exception ImportWarning
- モジュールのインポートで発生する可能性のある間違いに関する警告の基本クラス。
- exception UnicodeWarning
- Unicodeに関連する警告の基本クラス。
- exception ResourceWarning
リソースの使用に関連する警告の基本クラス。 デフォルトの警告フィルターでは無視されます。
バージョン3.2の新機能。
例外階層
組み込み例外のクラス階層は次のとおりです。