組み込みの例外—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/library/exceptions
移動先:案内検索

組み込みの例外

Pythonでは、すべての例外は BaseException から派生したクラスのインスタンスである必要があります。 特定のクラスに言及する except 句を含む try ステートメントでは、その句はそのクラスから派生した例外クラスも処理します(ただし、 it の元となる例外クラスは処理しません)。 ] 導出されます)。 サブクラス化によって関連付けられていない2つの例外クラスは、同じ名前であっても同等になることはありません。

以下にリストされている組み込み例外は、インタープリターまたは組み込み関数によって生成できます。 特に記載のない限り、エラーの詳細な原因を示す「関連値」があります。 これは、文字列またはいくつかの情報項目のタプル(たとえば、エラーコードとコードを説明する文字列)の場合があります。 関連する値は通常、引数として例外クラスのコンストラクターに渡されます。

ユーザーコードにより、組み込みの例外が発生する可能性があります。 これを使用して、例外ハンドラーをテストしたり、インタープリターが同じ例外を発生させた状況と「同じように」エラー状態を報告したりできます。 ただし、ユーザーコードが不適切なエラーを発生させるのを防ぐものは何もないことに注意してください。

組み込みの例外クラスをサブクラス化して、新しい例外を定義できます。 プログラマーは、 BaseException からではなく、 Exception クラスまたはそのサブクラスの1つから新しい例外を派生させることをお勧めします。 例外の定義の詳細については、Pythonチュートリアルのユーザー定義の例外を参照してください。

exception または finally 句で例外を発生(または再発生)すると、__context__は最後にキャッチされた例外に自動的に設定されます。 新しい例外が処理されない場合、最終的に表示されるトレースバックには、元の例外と最後の例外が含まれます。

(裸のraiseを使用して現在処理されている例外を再発生させるのではなく)新しい例外を発生させる場合、 from を[ X219X]レイズ:

raise new_exc from original_exc

from に続く式は、例外またはNoneである必要があります。 発生した例外では、__cause__として設定されます。 __cause__を設定すると、__suppress_context__属性も暗黙的にTrueに設定されるため、raise new_exc from Noneを使用すると、表示目的で古い例外が新しい例外に効果的に置き換えられます(例: KeyErrorAttributeError )に変換しますが、デバッグ時のイントロスペクションのために__context__で使用可能な古い例外を残します。

デフォルトのトレースバック表示コードには、例外自体のトレースバックに加えて、これらの連鎖例外が表示されます。 __cause__で明示的に連鎖された例外が存在する場合は、常に表示されます。 __context__の暗黙的に連鎖された例外は、__cause__None であり、__suppress_context__がfalseの場合にのみ表示されます。

いずれの場合も、チェーンされた例外の後に例外自体が常に表示されるため、トレースバックの最後の行には、発生した最後の例外が常に表示されます。

基本クラス

次の例外は、主に他の例外の基本クラスとして使用されます。

exception BaseException

すべての組み込み例外の基本クラス。 これは、ユーザー定義クラスによって直接継承されることを意図したものではありません(そのためには、 Exception を使用してください)。 このクラスのインスタンスで str()が呼び出されると、インスタンスへの引数の表現が返されるか、引数がない場合は空の文字列が返されます。

args

例外コンストラクターに与えられた引数のタプル。 一部の組み込み例外( OSError など)は、特定の数の引数を予期し、このタプルの要素に特別な意味を割り当てますが、他の例外は通常、エラーメッセージを表示する単一の文字列でのみ呼び出されます。

with_traceback(tb)

このメソッドは、 tb を例外の新しいトレースバックとして設定し、例外オブジェクトを返します。 これは通常、次のような例外処理コードで使用されます。

try:
    ...
except SomeException:
    tb = sys.exc_info()[2]
    raise OtherException(...).with_traceback(tb)
exception Exception
すべての組み込みの、システムを終了しない例外は、このクラスから派生します。 すべてのユーザー定義の例外も、このクラスから派生する必要があります。
exception ArithmeticError
さまざまな算術エラーに対して発生する組み込み例外の基本クラス: OverflowErrorZeroDivisionErrorFloatingPointError
exception BufferError
バッファ関連の操作が実行できない場合に発生します。
exception LookupError
マッピングまたはシーケンスで使用されるキーまたはインデックスが無効な場合に発生する例外の基本クラス: IndexErrorKeyError 。 これは、 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 のサブクラス。 Nonesys.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 に設定してください。

ノート

NotImplementedErrorNotImplementedは、名前と目的が似ていても互換性がありません。 いつ使用するかについては、 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で変更: EnvironmentErrorIOErrorWindowsErrorsocket.errorselect。 errormmap.errorOSError にマージされ、コンストラクターがサブクラスを返す場合があります。

バージョン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(message, details)

パーサーで構文エラーが発生したときに発生します。 これは、 import ステートメント、組み込み関数 compile()exec()、または eval()の呼び出しで発生する可能性があります。 、または最初のスクリプトまたは標準入力を読み取るとき(これもインタラクティブに)。

例外インスタンスの str()は、エラーメッセージのみを返します。 詳細はタプルであり、そのメンバーは個別の属性としても使用できます。

filename

構文エラーが発生したファイルの名前。

lineno

エラーが発生したファイルの行番号。 これは1インデックスです。ファイルの最初の行のlinenoは1です。

offset

エラーが発生した行の列。 これは1インデックスです。行の最初の文字のoffsetは1です。

text

エラーに関係するソースコードテキスト。

f-stringフィールドのエラーの場合、メッセージの前には「f-string:」が付き、オフセットは置換式から作成されたテキスト内のオフセットです。 たとえば、f'Bad {ab} field 'をコンパイルすると、次のargs属性が生成されます:(' f-string:… '、(' '、1、4、'(ab)n '))。

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 EAGAINEALREADYEWOULDBLOCKEINPROGRESSに対応します。

OSError の属性に加えて、 BlockingIOError にはもう1つの属性を設定できます。

characters_written

ストリームがブロックされる前にストリームに書き込まれた文字数を含む整数。 この属性は、 io モジュールのバッファリングされたI / Oクラスを使用する場合に使用できます。

exception ChildProcessError
子プロセスの操作が失敗したときに発生します。 errno ECHILDに対応します。
exception ConnectionError

接続関連の問題の基本クラス。

サブクラスは、 BrokenPipeErrorConnectionAbortedErrorConnectionRefusedError 、および 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()など)が要求された場合に発生します。 ほとんどのPOSIXプラットフォームでは、操作がディレクトリ以外のファイルをディレクトリであるかのように開こうとしたり、トラバースしたりしようとした場合にも発生する可能性があります。 errno ENOTDIRに対応します。
exception PermissionError
適切なアクセス権(ファイルシステムのアクセス許可など)なしで操作を実行しようとしたときに発生します。 errno EACCESおよびEPERMに対応します。
exception ProcessLookupError
特定のプロセスが存在しない場合に発生します。 errno ESRCHに対応します。
exception TimeoutError
システム機能がシステムレベルでタイムアウトしたときに発生します。 errno ETIMEDOUTに対応します。

バージョン3.3の新機能:上記のすべての OSError サブクラスが追加されました。


も参照してください

PEP 3151 -OSとIOの例外階層を作り直しました


警告

次の例外は警告カテゴリとして使用されます。 詳細については、警告カテゴリのドキュメントを参照してください。

exception Warning
警告カテゴリの基本クラス。
exception UserWarning
ユーザーコードによって生成される警告の基本クラス。
exception DeprecationWarning

非推奨の機能に関する警告が他のPython開発者を対象としている場合の、それらの警告の基本クラス。

__main__モジュール( PEP 565 )を除いて、デフォルトの警告フィルターでは無視されます。 Python開発モードを有効にすると、この警告が表示されます。

非推奨ポリシーについては、 PEP 387 で説明されています。

exception PendingDeprecationWarning

廃止され、将来廃止される予定であるが、現時点では廃止されていない機能に関する警告の基本クラス。

このクラスは、今後の非推奨の可能性について警告を発することはまれであるため、めったに使用されません。 DeprecationWarning は、すでにアクティブな非推奨に推奨されます。

デフォルトの警告フィルターでは無視されます。 Python開発モードを有効にすると、この警告が表示されます。

非推奨ポリシーについては、 PEP 387 で説明されています。

exception SyntaxWarning
疑わしい構文に関する警告の基本クラス。
exception RuntimeWarning
疑わしい実行時の動作に関する警告の基本クラス。
exception FutureWarning
非推奨の機能に関する警告の基本クラス。これらの警告は、Pythonで記述されたアプリケーションのエンドユーザーを対象としています。
exception ImportWarning

モジュールのインポートで発生する可能性のある間違いに関する警告の基本クラス。

デフォルトの警告フィルターでは無視されます。 Python開発モードを有効にすると、この警告が表示されます。

exception UnicodeWarning
Unicodeに関連する警告の基本クラス。
exception BytesWarning
bytes および bytearray に関連する警告の基本クラス。
exception ResourceWarning

リソースの使用に関連する警告の基本クラス。

デフォルトの警告フィルターでは無視されます。 Python開発モードを有効にすると、この警告が表示されます。

バージョン3.2の新機能。


例外階層

組み込み例外のクラス階層は次のとおりです。

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning