Pythonエラーと組み込み例外をマスターする
Pythonエラーと組み込み例外
Pythonが問題をどう通知するか、構文エラーと実行時エラーの違い、組み込み例外を自信を持って扱う方法を学びます。
動画:Python例外処理
Pythonプログラムを実行すると、インタプリタは未処理のエラーに遭遇すると即座に実行を停止します。これらのエラーは大きく2つのカテゴリに分類されます:
- 構文エラー — パース時に検出される問題
- 論理エラー(例外) — コード実行中に発生する問題
Python構文エラー
ソースコードがPythonの文法規則に違反すると構文エラーが発生します。インタプリタはエラーメッセージのキャレット(^)で正確な位置を示します。
> >>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
この例ではif文の後のコロン(:)不足がSyntaxErrorを引き起こします。
Python論理エラー(例外)
論理エラーまたは例外は、コードが構文チェックをパスした後に表面化します。一般的な例:
- ゼロ除算(
ZeroDivisionError) - 存在しないファイルのオープン(
FileNotFoundError) - 利用不可モジュールのインポート(
ImportError)
例外が発生するとPythonは例外オブジェクトを作成。未処理のままならトレースバックが表示され、コールスタックと失敗理由が示されます。
> >>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
> >>> open("imaginary.txt")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
Python組み込み例外
Pythonインタプリタは様々な組み込み例外を発生させ、異なる失敗状況を通知します。以下で一覧取得可能:
print(dir(locals()['__builtins__']))
頻繁に遭遇する組み込み例外と発生条件の簡潔なリファレンス:
| 例外 | エラーの原因 |
|---|---|
AssertionError | assert文が失敗したとき |
AttributeError | 属性代入または参照が失敗したとき |
EOFError | input()関数がEOF条件に達したとき |
FloatingPointError | 浮動小数点演算が失敗したとき |
GeneratorExit | ジェネレータのclose()メソッドが呼ばれたとき |
ImportError | インポートモジュールが見つからないとき |
IndexError | シーケンスインデックスが範囲外のとき |
KeyError | 辞書にキーがないとき |
KeyboardInterrupt | ユーザーがCtrl+CまたはDeleteを押したとき |
MemoryError | 操作が利用可能メモリを超えたとき |
NameError | 変数がローカル/グローバルスコープで見つからないとき |
NotImplementedError | 実装を持たない抽象メソッドで発生 |
OSError | システム関連エラー(ファイルI/Oなど) |
OverflowError | 算術結果が表現可能範囲を超えたとき |
ReferenceError | 弱参照がGC済みオブジェクトをプロキシするとき |
RuntimeError | 他のカテゴリに当てはまらないエラー |
StopIteration | next()でイテレータが尽きたとき |
SyntaxError | パーサーが無効な構文を検出したとき |
IndentationError | インデントが不正なとき |
TabError | インデントでタブとスペースが混在するとき |
SystemError | インタプリタが内部エラーを検出したとき |
SystemExit | sys.exit()で発生 |
TypeError | 不適切な型のオブジェクトを操作/関数が受け取ったとき |
UnboundLocalError | ローカル変数が代入前に参照されたとき |
UnicodeError | Unicode関連のエンコード/デコードエラー |
UnicodeEncodeError | Unicodeエンコードエラー |
UnicodeDecodeError | Unicodeデコードエラー |
UnicodeTranslateError | Unicode翻訳エラー |
ValueError | 正しい型だが不適切な値の引数を関数が受け取ったとき |
ZeroDivisionError | ゼロで除算またはモジュロ演算したとき |
より細かい制御が必要な場合、Pythonではカスタム例外クラスを定義可能です。詳細はPythonユーザー定義例外を参照。
例外処理はtry、except、finallyブロックで直感的に行えます。詳細についてはPython try, except, finally文を参照。
Python
- Python キーワードと識別子: 予約語と命名規則をマスター
- Python 文・インデント・コメント: 明確なガイド
- Python 変数・定数・リテラル: 包括的ガイド
- Python 型変換とキャスト: 包括的ガイド
- Python I/Oとモジュールインポート完全マスター: 実践ガイド
- Python グローバル・ローカル・非ローカル変数を理解する
- Pythonにおける数値、型変換、数学のマスター
- Pythonディレクトリ・ファイル操作マスター:作成、移動、一覧、リネーム、削除
- Pythonカスタム例外マスター:実践ガイド
- Pythonで現在の日付と時刻を取得する実践ガイド
- Java throw vs throws:実践例でマスターする例外ハンドリング