結論から言うと、Pythonのエラーメッセージは最後の行から読み、次にファイル名と行番号を確認すると原因を探しやすくなります。

Pythonのエラー表示は、最初は長くて難しく見えます。
しかし、すべてを一度に理解する必要はありません。
この記事では、エラーメッセージのどこを見ればよいかを、実行できるコードと一緒に整理します。

この記事でわかること

  • Pythonのエラーメッセージで最初に見る場所
  • トレースバックの基本的な読み方
  • 実務でエラー調査を速くする考え方

完成コード

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

def parse_price(text: str) -> int:
    return int(text)


def calculate_total(row: dict[str, str]) -> int:
    quantity = int(row["quantity"])
    unit_price = parse_price(row["unit_price"])
    return quantity * unit_price


order = {
    "item": "ノート",
    "quantity": "3",
    "unit_price": "120円",
}

try:
    total = calculate_total(order)
except ValueError as error:
    print("エラーを確認しました")
    print(f"例外名: {type(error).__name__}")
    print(f"メッセージ: {error}")
else:
    print(f"合計金額: {total}円")

コードのポイント

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

  • unit_price"120円" という文字列が入っています
  • int("120円") は整数に変換できないため ValueError になります
  • except ValueError as error で例外を受け止めています
  • type(error).__name__ で例外名を表示しています

実際に tryexcept を外して実行すると、Pythonはトレースバックを表示します。
トレースバックとは、エラーが発生するまでに通った処理の流れを示す情報です。

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

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

1. エラーが起きる場所を確認します

def parse_price(text: str) -> int:
    return int(text)

この関数は、文字列を整数に変換します。
"120" のような文字列なら成功しますが、"120円" のように数字以外の文字が混じると ValueError になります。

エラーメッセージを読むときは、まず「どの行で失敗したのか」を探します。
Pythonのトレースバックには、ファイル名と行番号が表示されます。
そこを見れば、調査を始める場所を絞り込めます。

2. 呼び出しの流れをたどります

def calculate_total(row: dict[str, str]) -> int:
    quantity = int(row["quantity"])
    unit_price = parse_price(row["unit_price"])
    return quantity * unit_price

エラーが出た行だけを見ても、なぜその値が渡されたのか分からないことがあります。
その場合は、トレースバックに出ている上の行も見ます。

この例では、calculate_total() から parse_price() が呼ばれています。
つまり、row["unit_price"] に入っていた値が、parse_price() に渡されたと考えられます。

実務では、関数がいくつも重なっていることがあります。
最後の例外名を見て、次に失敗した行を見て、必要なら呼び出し元へ戻る、という順番で読むと落ち着いて調査できます。

3. 例外名とメッセージを分けて読みます

except ValueError as error:
    print("エラーを確認しました")
    print(f"例外名: {type(error).__name__}")
    print(f"メッセージ: {error}")

エラーには、例外名とメッセージがあります。
例外名は ValueErrorTypeError のような名前です。
メッセージは、具体的に何が問題だったのかを示す文章です。

例外名からは、問題の種類を大まかに判断できます。
メッセージからは、実際に失敗した値や操作の内容を確認できます。
この2つを分けて読むと、原因を探しやすくなります。

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

実務でエラーメッセージを読むときは、次の順番にすると迷いにくいです。

  • 最後の行で、例外名とメッセージを確認します
  • 失敗したファイル名と行番号を確認します
  • その行で使っている変数や入力値を確認します
  • 必要なら、トレースバックを上に戻って呼び出し元を確認します
  • 同じエラーが再現する最小の入力を作って試します

特に自動化ツールやデータ処理では、エラーの原因が入力ファイル側にあることも多いです。
コードだけでなく、CSVの列名、JSONのキー、設定ファイルの値、実行している場所も確認します。

第4章で扱った tryexceptfinallyraiseTypeErrorValueError の違いを知っていると、エラー表示の意味を読み取りやすくなります。
次の第5章では、モジュールと import を扱うため、エラー表示に出るファイル名やパスの見方もさらに重要になります。

よくある勘違い・注意点

  • エラー表示は、上から全部読むより最後の行から見るほうが原因をつかみやすいです
  • 行番号は「原因のすべて」ではなく、調査を始める場所です
  • 例外名だけで決めつけず、メッセージと入力値も確認します
  • エラーを消すためだけに広い except を書くと、原因が見えにくくなります

まとめ

  • Pythonのエラーメッセージは、最後の例外名とメッセージから読みます
  • 次にファイル名と行番号を見て、失敗した処理を確認します
  • 必要なら、トレースバックを上に戻って呼び出し元を追います
  • エラーメッセージを読めると、実務のデバッグや自動化ツールの保守がしやすくなります

次の記事