3秒でわかる
プログラムが失敗した理由と失敗した場所を伝える文章。読み飛ばさずに最後の行から順に読むだけで、原因の大半はその場で特定できます。
もう少し詳しく
どういうものか
エラーメッセージは、実行が失敗したときにプログラムが出す報告です。多くの言語では、エラーの種類、説明文、発生したファイルと行番号、そこに至るまでの呼び出し経路がまとめて表示されます。この呼び出し経路をスタックトレースと呼びます。
英語で長く出るため見た瞬間に閉じたくなりますが、必要な情報はほぼ決まった位置にあります。
なぜ必要か
エラーが出るのは、間違いが実行前に見つかったということです。何も言わずに変な値のまま進むほうが、後で原因を探すのが何倍も大変になります。
読む順番には型があります。まず最終行のエラー名と説明を読み、次にスタックトレースのうち自分が書いたファイルの行を上から探します。ライブラリ内部の行が長く続いていても、原因は自分のコードの最後の 1 行にあることがほとんどです。
具体例
Python の典型的な出力です。
Traceback (most recent call last):
File "app.py", line 12, in <module>
total = price * count
TypeError: can't multiply sequence by non-int of type 'str'最終行が種類と理由、その上が発生場所です。この例は、price か count が数値ではなく文字列だと言っています。入力を数値に変換していない、という原因にすぐ当たります。
count = input("個数") # ここは文字列のまま
count = int(input("個数")) # 変換すれば解決するつまずきやすいところ
エラー本文をそのまま検索窓に貼ると、ファイルパスや変数名が混ざって結果が出ません。固有名詞を削り、エラー名と共通部分だけで検索すると同じ症状が見つかります。
もうひとつは、複数のエラーが出たときに最後のものから直そうとするケースです。コンパイルエラーは先に出たものが原因で後続が連鎖しているだけの場合が多く、いちばん上から 1 つ直して再実行するほうが早く収束します。
例外を握りつぶす書き方も後で効いてきます。エラーだけ捨てて処理を続けると、失敗した事実がどこにも残らず、後日データの一部だけが欠けている状態として表面化します。捕まえるなら、内容を記録してから捨てるかどうかを決めます。
似た用語との違い
| 語 | 何を指すか |
|---|---|
| エラーメッセージ | 失敗の理由を説明する文章 |
| スタックトレース | 失敗に至った呼び出しの経路 |
| 警告 | 動くが問題がありそうという通知 |
| ログ | 動作の記録全般。エラー以外も含む |
覚え方
「下から読む」。最終行に答え、その上に住所が書いてあります。
