結論から言うと、例外名を読むと「どの種類の問題が起きたのか」を大まかに判断できます。

Pythonのエラー画面には、最後のほうに TypeErrorValueError のような名前が表示されます。
最初は難しく見えますが、例外名には原因を探すための手がかりが入っています。
この記事では、Pythonでよく出る例外を、実務での読み方に近い形で整理します。

この記事でわかること

  • Pythonでよく出る例外名の意味
  • 例外ごとに確認する場所
  • エラーを直すときの考え方

完成コード

完成コードは次の通りです。

def parse_order(row: dict[str, str]) -> dict[str, int | str] | None:
    try:
        item = row["item"]
        quantity = int(row["quantity"])
        unit_price = int(row["unit_price"])
    except KeyError as error:
        print(f"必要な列がありません: {error}")
        return None
    except ValueError as error:
        print(f"数値に変換できない値があります: {error}")
        return None

    return {
        "item": item,
        "quantity": quantity,
        "unit_price": unit_price,
        "total": quantity * unit_price,
    }


rows = [
    {"item": "ノート", "quantity": "3", "unit_price": "120"},
    {"item": "ペン", "quantity": "abc", "unit_price": "80"},
    {"item": "ファイル", "quantity": "2"},
]

for row in rows:
    order = parse_order(row)
    if order is not None:
        print(f"{order['item']}: {order['total']}円")

コードのポイント

このコードでは、注文データを辞書として受け取り、数量と単価を数値に変換して合計金額を計算しています。

  • KeyError は、辞書に指定したキーがないときに発生します
  • ValueError は、値を期待した形式に変換できないときに発生します
  • except ... as error と書くと、エラーの内容を変数として扱えます
  • エラーになった行は None を返し、処理を続けています

例外名を見ると、データの形が違うのか、値の中身が違うのかを切り分けやすくなります。

コードを順番に説明します

主要な処理を分けて説明します。

1. 辞書のキーを取り出します

item = row["item"]
quantity = int(row["quantity"])
unit_price = int(row["unit_price"])

row["item"] のように辞書から値を取り出すとき、指定したキーが存在しなければ KeyError が発生します。
CSVを DictReader で読んだときや、APIから受け取ったJSONを扱うときによく出る例外です。

この例では、3件目のデータに unit_price がないため、KeyError になります。
列名のスペル違い、設定ファイルの項目不足、APIレスポンスの形式変更などが原因になることがあります。

2. 文字列を数値へ変換します

quantity = int(row["quantity"])
unit_price = int(row["unit_price"])

int() は、文字列を整数に変換する関数です。
"3""120" は変換できますが、"abc" のような文字列は整数として解釈できないため ValueError になります。

この例では、2件目の quantity"abc" なので ValueError が発生します。
ファイルや入力フォームから受け取った値は文字列であることが多いため、数値に変換する場所ではよく確認が必要です。

3. 例外名ごとに処理を分けます

except KeyError as error:
    print(f"必要な列がありません: {error}")
    return None
except ValueError as error:
    print(f"数値に変換できない値があります: {error}")
    return None

KeyErrorValueError を分けているため、原因に合わせたメッセージを出せます。
どちらも「注文データを処理できない」という結果は同じですが、直す場所は違います。

KeyError なら列名やキーの有無を確認します。
ValueError なら値の中身が数値として正しいかを確認します。
このように、例外名は調査の出発点になります。

実務で使うときのポイント

実務では、エラーが出たらまず最後の例外名とメッセージを見ます。
長いエラー表示の全部を一度に理解しようとしなくても、最後の行から原因を絞り込めることが多いです。

よく出る例外は、次のように読み分けます。

  • TypeError は、型の使い方が合わないときに出ます。文字列と数値をそのまま足すような場面で起きます
  • ValueError は、型は合っているものの値の中身が処理に合わないときに出ます。int("abc") などが例です
  • KeyError は、辞書に指定したキーがないときに出ます。列名や設定項目を確認します
  • IndexError は、リストに存在しない位置を指定したときに出ます。要素数を確認します
  • FileNotFoundError は、指定したファイルが見つからないときに出ます。パスや実行場所を確認します

自動化ツールやデータ処理では、例外名を読めるだけで調査がかなり速くなります。
第3章で扱ったCSVやJSONでも、列名不足なら KeyError、数値変換の失敗なら ValueError のように、原因が例外名に表れます。

よくある勘違い・注意点

  • エラー表示は上から全部読む必要があるとは限りません。まず最後の例外名を見ます
  • TypeErrorValueError は似ていますが、型の問題か値の中身の問題かで分けて考えます
  • KeyError はPythonの不具合ではなく、辞書にそのキーがないという意味です
  • 例外をすべて同じ except で受けると、原因の違いが見えにくくなります

まとめ

  • 例外名は、エラー原因を探すための重要な手がかりです
  • ValueError は値の中身、KeyError は辞書のキー不足を疑います
  • TypeErrorIndexErrorFileNotFoundError も実務でよく出ます
  • 例外を読み分けられると、CSV、JSON、入力処理のデバッグがしやすくなります