結論から言うと、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__で例外名を表示しています
実際に try と except を外して実行すると、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}")エラーには、例外名とメッセージがあります。
例外名は ValueError や TypeError のような名前です。
メッセージは、具体的に何が問題だったのかを示す文章です。
例外名からは、問題の種類を大まかに判断できます。
メッセージからは、実際に失敗した値や操作の内容を確認できます。
この2つを分けて読むと、原因を探しやすくなります。
実務で使うときのポイント
実務でエラーメッセージを読むときは、次の順番にすると迷いにくいです。
- 最後の行で、例外名とメッセージを確認します
- 失敗したファイル名と行番号を確認します
- その行で使っている変数や入力値を確認します
- 必要なら、トレースバックを上に戻って呼び出し元を確認します
- 同じエラーが再現する最小の入力を作って試します
特に自動化ツールやデータ処理では、エラーの原因が入力ファイル側にあることも多いです。
コードだけでなく、CSVの列名、JSONのキー、設定ファイルの値、実行している場所も確認します。
第4章で扱った try、except、finally、raise、TypeError と ValueError の違いを知っていると、エラー表示の意味を読み取りやすくなります。
次の第5章では、モジュールと import を扱うため、エラー表示に出るファイル名やパスの見方もさらに重要になります。