2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

エラーの読み方 ~おい エラーを見るんだ~

Last updated at Posted at 2022-03-30

初めに

 みなさんこんにちは。この記事を開いていただきありがとうございます。
 この記事は初心者に向けたエラーの読み方のコツについて紹介しています。簡単なエラーをQiitaやTeratailなんかに投稿してGGRKSの5文字を浴びせられて、しょんぼりするプログラマーを減らそうという思いで書いております。
 今ギクッとしたそこのあなた! ギクッとしてない人も! 今悩んでいるエラーをひとまず置いておいてこの記事をゆっくり読んでみてください。
どうぞごゆっくり

エラーとは?

 まず、エラーとは何ぞやというところから話します。ここを読んでもらいたい人はエラー文を友達だと思っていない人です。
「エラーが嫌だって?w 何言ってんだよぉw エラーは友達に決まってんだろ」と心の底から思ってる人は飛ばしてどうぞ。(←頭おかしいな)
 
 それでは本題です。エラーとはプログラムを実行するうえで「このままプログラムが実行されるとPCがおかしくなってしまうよ~」というのを未然に防いで教えてくれる機能のことです。それだけ聞くと知っとるわって感じがしますよね? でも実は自分でコードをバリバリ書く人にとってこのエラーはなんでも教えてくれる友達以上恋人未満の存在なのです。

エラーが教えてくれること

  • エラーの種類
  • エラーが起きた理由
  • 発生場所(ものによっては出ないこともある)

 プログラマーはエラーを読むうえでこの3点に気をつける必要があります。
プログラマーはエラーをすべて読むわけではなくこの要点だけをうまく見つけているのです。

エラーからうまく情報を抜き出す

 ここからは僕のエラーの読み方を順番に紹介します。あくまで僕のやり方なので自分に最適な方法を見つけてください。
ちなみに使用するコード・エラーの例はこれです。(エラーを用意するのは逆に結構めんどいw)

error.py
array = [23, 39, 45, 15, 72, 53, 324, 532]

print(array[len(array)])
Traceback (most recent call last):
  File "d:\my program\python\test\main.py", line 3, in <module>
    print(array[len(array)])
IndexError: list index out of range

クソみたいなエラーですね。

1. エラーの種類を見つける

 まずは、エラーの種類を見つけます。
Pythonならば大体下のほうに書いてあるので探しやすいですね。「例でいうと、IndexError」

2. エラーが起きた理由を見る

 次にエラーの起きた理由を見ます。例でいうと「list index out of range」です。
 ここで僕はよくGoogle翻訳を使います。まず一度検索する前に翻訳にかけて意味をよくくみ取ってください。要するに早とちりしてサンプルコードをコピペしまくってぐちゃぐちゃにするよりも、よく意味を理解したほうが後々同じエラーが出たときに楽だということです。
あとは、次の手順に行きましょう。

3. エラー箇所を見る

 最後にエラーが起きた個所を見ます。例でいうとFile "d:\my program\python\test\main.py", line 3, in <module>の行です。
 この例では、すごく簡単ですね。ですがここが一番エラー読みで肝となる場所です。例えば、Qiitaによく投稿されてるエラーでRubyとかJavaとかのライブラリの中のファイルパスまで書かれているクソ長いエラー文をよく目にしますよね? その場合は、どこを見ればいいかというと、自分が書いた中で一番階層が深いファイルまでです。

 このようなエラーは、自分でクラスなどを実装してImportしまくってるときによく出ます。
その時は、自分が書いた中で一番深い階層を調べます。必ずしもそのファイルがエラー原因になっているということではありませんが、そのファイルをもとにたどっていきます。
 めちゃ優しい言語だと、エラーの行だけでなく文字数まで出してくれるものまであるのでぜひ活用しましょう。

 そして、2番の情報を使ってコードを見ながら対話します。すると、「arrayっていう配列よりも指定したインデクスが大きいのね。ごめんちゃい」って分かるわけです。ここで大事なのは、友達であるエラーの話をよく聞いてあげることです。するとエラーもあなたに何か訴えかけてくれるでしょう。
 しかし、これはエラーを一度見たことがあるかエラー文がわかりやすいときに限ります。そこで次に進みます。

4. 検索する

 前の手順で解決法がわからないときは、google先生に聞きます。このとき大事なのは、よく言われることですがエラーの意味をよく理解してコピペしましょう。
データがどのように流れ、どのような不具合を起こしたのか一度頭の中で一通りシュミレーションしましょう。それを繰り返すことでだんだんと脳内デバッグに慣れてくるとおもいます。

おまけ

 エラーを見るうえで重要なのが上で紹介した3点ですが、TypeScriptなどのビルド・トランスパイルする系の言語ではトランスパイル前のファイルではどこがエラーかわからないことがよくあります。
 なので、このようなことを防ぐためにtsconfig.jsonのソースマップを有効にしましょう。
そうすると、ブラウザで表示したときにブラウザ側のほうでエラー箇所をたどってくれます。

最後に

 この記事によって、「GGRKS攻撃」および「DY(ドキュメント読め)攻撃」の被害者が減ることを切に願っております。
本当にクソみたいな基本的なことしか書けずすみませんでした。最後まで読んでいただきありがとうございました。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?