はじめに
プログラミングにおいて、エラーとの戦いは付き物です。特に最初のうちは、基本的な構文エラーで止まってしまうことが多くあります。このようなエラーを自分で解決できるようになるために、エラーが起きた時にすることをまとめてみました。
想定読者
Pythonで初めてプログラミングに触れる方
すでに環境は整っているものとします。
環境
- VisualStudioCode
- Python3.9
- JupyterNotebook(VSCode版)
1. エラーメッセージを読む
ほとんどのプログラミング言語では、実行時に想定と異なる状況が起きた時エラーが出るようになっています。
(C言語などではその一段階前のコンパイル時にエラーが出る場合もあります)
Pythonでは読みやすいエラーメッセージが出てくるので、読んでみましょう。
よくあるエラー
IndexError
リストなどのインデックスがリストの長さを超えてしまった時に出るエラーです。
リストの長さが10のとき、インデックスは0~9の範囲でなければならないことに注意してください。
points = [90, 80, 50]
for i in range(4):
print(points[i])
#----- 出力 -----
90
80
50
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
/var/folders/mk/4l2s4ftj18sgrl6l79zdx1p40000gn/T/ipykernel_8747/2790366349.py in <module>
2
3 for i in range(4):
----> 4 print(points[i]) # <- エラーが出た場所を詳しく教えてくれます
IndexError: list index out of range
KeyError
IndexError
と同じように、あるディクショナリに、存在しないキーでアクセスした時に起きるエラーです。
points = {"Alice": 90, "Bob": 85}
print(points["Carol"])
#----- 出力 -----
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/var/folders/mk/4l2s4ftj18sgrl6l79zdx1p40000gn/T/ipykernel_8747/2731939624.py in <module>
1 points = {"Alice": 90, "Bob": 85}
2
----> 3 print(points["Carol"])
KeyError: 'Carol'
NameError
変数名が存在しない場合のエラーです。タイプミスや、ローカル変数にアクセスしようとした時などに発生します。
def add(a, b):
result = a + b
add(1, 2)
print(result)
#----- 出力 -----
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/var/folders/mk/4l2s4ftj18sgrl6l79zdx1p40000gn/T/ipykernel_8747/2211533763.py in <module>
3
4 add(1, 2)
----> 5 print(result)
NameError: name 'result' is not defined
2. 検索する
これがメインと言っても過言では無いです。最強のプログラミングスキルだと思います。
エラーメッセージで検索する
検索するとき、Python リスト エラー
とPython IndexError: list index out of range
とでは、得られる情報の質が全く違います。なるべく具体的になるようにキーワードを絞りましょう。
基本的には、エラーメッセージをコピペで大丈夫です。
print = 30
print("上書きしました")
#----- 出力 -----
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/var/folders/mk/4l2s4ftj18sgrl6l79zdx1p40000gn/T/ipykernel_8747/328976122.py in <module>
1 print = 30
2
----> 3 print("上書きしました")
TypeError: 'int' object is not callable # <- この行を検索しよう
たとえばこのようなエラーが出た場合、最後の行を検索してみましょう。上の方にこのようなサイトが出てくるはずです。Pythonのエラーは最後の行に情報が端的にまとまっているので、この部分を検索するのが一番効率がいい気がします。
場合によっては、複数の言語で似たようなエラーが出る場合があるのでキーワードにPython
と入れておくと安心です。
抽象度を高める
さっきと矛盾しているようですが、時にはより抽象的に検索をする必要もあります。
例えば先ほどの例で、
TypeError Traceback (most recent call last)
/var/folders/mk/4l2s4ftj18sgrl6l79zdx1p40000gn/T/ipykernel_8747/328976122.py in <module>
この部分を検索した場合どうなるでしょうか。おそらく具体的な解決法は得られないと思います。
/var/folders/mk/4l2s4ftj18sgrl6l79zdx1p40000gn/T/ipykernel_8747/328976122.py
この部分は実行しているPythonのパスであるので、実行する人によって異なります。このように環境に依存する文字列を含んだ検索は避けた方がいいでしょう。
英語に臆さない
基本的には英語の方が実例が多いので頑張って読みましょう!
検索について詳しくはこれらのリンクを参考にしてください。
3. 人に聞く
最終手段です。ほとんどの場合解決すると思われます。
$\downarrow$こちらを参考にしてください。15分は自分で調べてみましょう。
Googleの人工開発チームが提唱した「15分ルール」を解説
— たみおん|Web制作脱初心者の学びを発信 (@baka_engineer) October 3, 2021
過去に出てたりするネタですが概要だけだと実際に何するのか分かりにくいと思ったので、経験を踏まえたアクションポイント入れてます。
参考程度に。#駆け出しエンジニアと繋がりたい#プログラミング初心者 pic.twitter.com/Q8Rw6WdxOq
直接人に聞く
身近に強い人がいたら積極的に聞いていきましょう。
Webサイトで聞く
身近にそのような人がいない場合、web上の質問サービスで聞くのも一つです。Yahoo知恵袋などでも良いですが、プログラミングに特化したサイトもあります。
-
StackOverflow $\leftarrow$あまり初心者向きでは無いかもしれません
個人情報を出してしまわないように気をつけましょう。特にPathを貼り付ける時には自分の本名がついていることがあります。
終わりに
よいプログラミングライフを。