エラーメッセージを閉じるのではなく読み解けるようになりましょう。種類、ファイル、行番号、スタックトレース。
このレッスンを Kodokon で開くエラーは罰ではありません。パソコンはあなたを裁いているわけでも、笑っているわけでもありません。どうすればいいか分からなくなったことに気づき、その理由をあなたに伝えているのです。カーナビが「ルートを再検索します」と告げるのとまったく同じで、それは非難ではなく情報です。初心者は、赤い画面を読まずに閉じてしまいがちです。開発者は、それを最後までゆっくり読みます。機械がはっきりした言葉であなたに語りかけてくれる、たいていは唯一の瞬間なのですから。
ほとんどすべてのエラーメッセージには、同じ情報が入っています。エラーの種類は、それを大きな家族に分類します。メッセージは、何が引っかかっているのかを一文で説明します。関係するファイルと行番号は、どこを見ればいいかを正確に教えてくれます。そしてスタックトレースが付くこともあります。プログラムが動かなくなるまでにたどった段階の一覧です。
Traceback (most recent call last):
File "shopping.py", line 12, in <module>
total = price * quantity
NameError: name 'quantity' is not defined先ほどの例では、すべてが書かれています。ファイルは shopping.py、行は12行目、種類は NameError、そしてメッセージは name 'quantity' is not defined と告げています。分かりやすく言えば、12行目で、一度も作っていない、あるいは名前を打ち間違えた変数 quantity を使っている、ということです。難しい調査は要りません。答えはすでにメッセージの中にありました。
Pythonのスタックトレースは下から上へ読みます。最後の行が種類と説明を示し、そのすぐ上に問題のファイルと行があります。トレースがとても長いときは、あなた自身のファイルに言及している最初の行を探しましょう。見慣れない、変わった名前のファイルを指している行は、あなたが使っているライブラリのものです。99%の場合、バグがあるのはライブラリではなく、あなたの呼び出し方のほうです。
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
at showProfile (app.js:24:18)
at start (app.js:41:3)いくつかの言い回しが繰り返し出てくるので、見分けられるようになると得をします。not defined は、使った名前がその場所に存在しないという意味です。undefined は、そのものは存在するけれど値を持っていないという意味です。unexpected は、プログラムが別のものを待っていたことを示し、たいていは閉じ忘れたかっこや引用符が原因です。permission denied は、コードではなく権限の問題を知らせています。そして no such file or directory は、あなたが書いたパスがどこにもつながっていないという意味です。
not defined を含むエラーは、たいてい何を意味しますか?