Kodokon kodokon.com

エラーメッセージを読んで理解する

エラーメッセージを閉じるのではなく読み解けるようになりましょう。種類、ファイル、行番号、スタックトレース。

8 分 · 3 問

このレッスンを Kodokon で開く

エラーは罰ではありません。パソコンはあなたを裁いているわけでも、笑っているわけでもありません。どうすればいいか分からなくなったことに気づき、その理由をあなたに伝えているのです。カーナビが「ルートを再検索します」と告げるのとまったく同じで、それは非難ではなく情報です。初心者は、赤い画面を読まずに閉じてしまいがちです。開発者は、それを最後までゆっくり読みます。機械がはっきりした言葉であなたに語りかけてくれる、たいていは唯一の瞬間なのですから。

ほとんどすべてのエラーメッセージには、同じ情報が入っています。エラーの種類は、それを大きな家族に分類します。メッセージは、何が引っかかっているのかを一文で説明します。関係するファイル行番号は、どこを見ればいいかを正確に教えてくれます。そしてスタックトレースが付くこともあります。プログラムが動かなくなるまでにたどった段階の一覧です。

PYTHON
Traceback (most recent call last):
  File "shopping.py", line 12, in <module>
    total = price * quantity
NameError: name 'quantity' is not defined
Pythonのメッセージ。ファイル、12行目、NameErrorという種類、そしてその説明。

先ほどの例では、すべてが書かれています。ファイルは shopping.py、行は12行目、種類は NameError、そしてメッセージは name 'quantity' is not defined と告げています。分かりやすく言えば、12行目で、一度も作っていない、あるいは名前を打ち間違えた変数 quantity を使っている、ということです。難しい調査は要りません。答えはすでにメッセージの中にありました。

Pythonのスタックトレースは下から上へ読みます。最後の行が種類と説明を示し、そのすぐ上に問題のファイルと行があります。トレースがとても長いときは、あなた自身のファイルに言及している最初の行を探しましょう。見慣れない、変わった名前のファイルを指している行は、あなたが使っているライブラリのものです。99%の場合、バグがあるのはライブラリではなく、あなたの呼び出し方のほうです。

JAVASCRIPT
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
    at showProfile (app.js:24:18)
    at start (app.js:41:3)
ブラウザのコンソールでも理屈は同じです。ファイルはapp.js、24行目、18文字目。

いくつかの言い回しが繰り返し出てくるので、見分けられるようになると得をします。not defined は、使った名前がその場所に存在しないという意味です。undefined は、そのものは存在するけれど値を持っていないという意味です。unexpected は、プログラムが別のものを待っていたことを示し、たいていは閉じ忘れたかっこや引用符が原因です。permission denied は、コードではなく権限の問題を知らせています。そして no such file or directory は、あなたが書いたパスがどこにもつながっていないという意味です。

理解度チェック

このレッスンの要点をしっかり覚えているか確認しましょう。

  1. エラーメッセージのどの情報が、最初に見るべき場所を教えてくれますか?
    • ファイル名と行番号
    • 画面に表示される文字の色
    • メッセージ全体の長さ
    • 使っているOSの名前
  2. Pythonのスタックトレースはどの向きに読みますか?
    • 上から下へ。最初の行が解決策を教えてくれる
    • 下から上へ。最後の行が種類と説明を示す
    • どの向きでもよい。ただの飾りだから
  3. not defined を含むエラーは、たいてい何を意味しますか?
    • 使った名前が、プログラムのその場所に存在しない
    • ファイルが大きすぎて開けない
    • インターネット接続が切れた