LoginSignup
1
2

More than 1 year has passed since last update.

Pythonでエラーが出た時、まずやること

Posted at

はじめに

プログラミングにおいて、エラーとの戦いは付き物です。特に最初のうちは、基本的な構文エラーで止まってしまうことが多くあります。このようなエラーを自分で解決できるようになるために、エラーが起きた時にすることをまとめてみました。

想定読者

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のパスであるので、実行する人によって異なります。このように環境に依存する文字列を含んだ検索は避けた方がいいでしょう。

英語に臆さない

基本的には英語の方が実例が多いので頑張って読みましょう!


検索について詳しくはこれらのリンクを参考にしてください。

検索力を上げて技術力を鍛える

Pythonの基本的なエラー一覧とその原因の確認方法

3. 人に聞く

最終手段です。ほとんどの場合解決すると思われます。

$\downarrow$こちらを参考にしてください。15分は自分で調べてみましょう。

直接人に聞く

身近に強い人がいたら積極的に聞いていきましょう。

Webサイトで聞く

身近にそのような人がいない場合、web上の質問サービスで聞くのも一つです。Yahoo知恵袋などでも良いですが、プログラミングに特化したサイトもあります。

個人情報を出してしまわないように気をつけましょう。特にPathを貼り付ける時には自分の本名がついていることがあります。

終わりに

よいプログラミングライフを。

1
2
0

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
1
2