🚨

【Python】エラーの種類の確認方法

2024/12/08に公開

概要

  • Pythonにおけるtry-exceptraiseassertの学習の際、左記3つの文を記載するには「エラーの種類」も併せて記載することが多いですが、「実際にどのようなエラーがあるか」が全く分かりませんでした。
  • とりあえず「どのようなエラーがあるかの確認方法」をChatGPTに聞いたので、そちらの内容をまとめたものをメモとして記載します。
  • Pythonの理解が深まったら、適宜修正・追記する予定です🙏

エラーの種類の確認方法

例外クラスを一覧で確認する方法

Pythonドキュメントを参照

組み込みの例外クラスを動的に取得

  • 実行中のPython環境で、例外クラスを一覧として取得することができます。
import builtins

# 組み込み例外だけをリストアップ
exceptions = [obj for obj in dir(builtins) if isinstance(getattr(builtins, obj), type) and issubclass(getattr(builtins, obj), BaseException)]
print(exceptions)
## 出力例
['ArithmeticError', 'AssertionError', 'AttributeError', 'EOFError', 'Exception', 'FileNotFoundError', 'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'RuntimeError', 'StopIteration', 'SyntaxError', 'TypeError', 'ValueError', 'ZeroDivisionError']

エラーの階層構造を確認

  • 例外クラスには階層があります。すべての例外はBaseExceptionクラスを基底クラスとして継承しています。
  • 以下コマンドにより、例外の階層や詳細な説明が出力されます。
help("exceptions")

手軽にエラーの種類を把握する方法

開発中にエラーを試してみる

  • エラーが発生した場合、その例外クラスがメッセージに表示されます。
  • 例えば、以下のように試すとどのエラーが発生するか確認できます。
try:
    x = 1 / 0  # ZeroDivisionError
except Exception as e:
    print(f"例外の種類: {type(e).__name__}")  # 'ZeroDivisionError'

IDEの補助機能を活用

  • PyCharmVS CodeなどのIDEを使うと、exceptを入力したときに候補としてよく使われる例外が表示されることがあります。

よく使われる例外の理解

  • 以下は、よく使われる例外のリストです
ValueError: 不正な値が渡された場合
TypeError: 型が間違っている場合
ZeroDivisionError: ゼロ除算が発生した場合
IndexError: リストやタプルの範囲外のインデックスをアクセス
KeyError: 辞書に存在しないキーをアクセス
FileNotFoundError: ファイルが存在しない場合
ImportError: モジュールが見つからない場合

エラー候補をプログラムで一覧表示

  • 以下のコードで、組み込み例外の名前と説明をリスト化して確認できます。
import builtins

# エラー名と説明を表示
for name in dir(builtins):
    obj = getattr(builtins, name)
    if isinstance(obj, type) and issubclass(obj, BaseException):
        print(f"{name}: {obj.__doc__}")

自動補完を活用する方法

例外を知らない場合

  • 最初はexcept Exception:のように、汎用的なExceptionで捕捉しておき、実行時に実際に発生するエラーを確認する。

デバッグ後に特定の例外に変更

  • 捕捉されたエラーを調べて、except ZeroDivisionError:except FileNotFoundError:のように特化していく。

Discussion