Python 初心者必読! これだけは知っておきたいよくあるエラー10選 【Python エラー一覧】

はじめに

本記事ではこちら(AI Academy 構文エラーと例外)のテキストに記載されている12種類のエラーから10種類のエラーを解説します。その他のエラーも知りたい方は是非読んで見てください。

構文エラーと例外の違い

Pythonでは構文エラー(syntax error)と例外(exception)の2種類のエラーが存在し、これらは区別されます。構文エラーとは、その字の通り構文として誤りがある場合に発生するエラーで、構文が正しくてもプログラム実行中に発生するエラーは例外と呼びます。「エラー」と「例外」を特に使い分けず、「エラー」と一括りに呼ぶ事もあります。

エラーの種類

構文エラーを含むエラーには、以下のようなものがあります。

・SyntaxError
・IndentationError
・NameError
・TypeError
・ValueError
・AttributeError
・IndexError
・KeyError
・ModuleNotFoundError
・ZeroDivisionError

エラーが発生すると、エラーが発生した行のプログラム以降のコードは実行されません。また、このテキストでは上記のエラーに関して1つ1つ説明していきますが、今の段階では全て覚える必要はありません。太字のエラーを優先的に理解するようにしてみてください。 

SyntaxError

SyntaxErrorはPythonの構文として正しくない場合に発生するエラーです。コロン:()の閉じ忘れなどがある場合に構文エラーになります。SyntaxErrorが発生した場合は、Pythonの構文が間違っていないか確認しましょう。構文エラーになるプログラムは以下の通りです。

for i in range(5)

エラー内容

  File "<stdin>", line 1
    for i in range(5)
                    ^
SyntaxError: invalid syntax

上記はfor文の文末に必要な:が記述されていないため、SyntaxErrorが発生しています。

もう1つの構文エラーに関しても確認してみましょう。

print('AI Academy

エラー内容

  File "<stdin>", line 1
    print('AI Academy
                    ^
SyntaxError: EOL while scanning string literal

上記はprint()関数の文末に必要な)の閉じ忘れがあるため、SyntaxErrorが発生しています。

IndentationError

IndentationErrorは、インデントが正しくない場合に発生するエラーです。IndentationErrorが発生した場合は、インデントが正しく行われているか確認しましょう。

a = 10
  print(a)

エラー内容

  File "<stdin>", line 1
    print(a)
    ^
IndentationError: unexpected indent

上記は2行目のprint(a)の先頭に余分なスペースが入ってる為、IndentationErrorが発生しています。またprint()関数や変数定義の前に全角スペース、半角スペースが含まれていてもIndentationErrorが発生します。

NameError

NameErrorは、変数名の間違いや綴間違い(スペスミス)などで、名前が見つからなかった場合のエラーです。Pythonでは、大文字小文字も区別されるため、その場合でもNameErrorになります。NameErrorが発生した場合は、その変数名が定義されているか、綴り間違いしていないか確認しましょう。

a = 10
print(A)

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'A' is not defined

上記は変数aを小文字で定義しているのにも関わらず、大文字Aとしてprint()関数の引数に渡している為にNameErrorが発生しています。

TypeError

TypeErrorは異なるデータ型同士の演算や関数にて処理が行われた場合に発生するエラーです。TypeErrorが発生した場合は、演算するデータの型が正しいか確認しましょう。

a = 10
b = 'hello'
a + b

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

上記は変数aと変数bがそれぞれ異なったデータ型の演算がされている為にTypeErrorが発生しています。

ValueError

ValueErrorは型は正しくても、値が適切でない場合に発生するエラーです。ValueErrorが発生した場合は関数に渡した値が適切かどうか確認してみましょう。

float('AI Academy')

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'AI Academy'

上記は、float()の引数に文字列が渡されている為にValueErrorが発生しています。ただし、文字列型の数値の場合はエラーは発生しません。

float("10")

出力結果

10.0

AttributeError

AttributeErrorは、属性(Attribute)を呼び出す際に発生するエラーです。属性(Attribute)とは、オブジェクトに存在する変数やメソッドのことです。オブジェクトやメソッドに関してはPython クラスとオブジェクトにて解説しています。AttributeErrorが発生した場合は、オブジェクト名、識別子名は正しいかどうか確認しましょう。具体的には、標準関数dir()を用いると、そのオブジェクトが対象の変数やオブジェクト(つまり属性)を持ち合わせているか確認出来ます。 

a = 10
a.append(20)

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'append'

上記の変数aには、append()という属性を持ち合わせていないため、AttributeErrorが発生しています。dir()を用いると一覧を確認出来ます。

print(dir(a))

出力結果

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

上記のように変数aにはappend()が定義されていません。append()はリスト型で利用できるメソッドですので、以下のようにすれば解決出来ます。

a = [10]
a.append(20)
print(a)

出力結果

[10, 20]

IndexError

IndexErrorはリスト型やタプル型に対して、要素数を超えたインデックス値を指定した場合に発生するエラーです。IndexErrorが発生した場合は要素数は正しいかを確認し、その上で指定したインデックスが正しいか確認しましょう。

a = [10, 20, 30] # 3つの要素
print(a[3]) # インデックスは0からカウント

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

上記は、範囲外のインデックス「3」を指定したことで、IndexErrorが発生しています。インデックス(添字)は0から数えますので、変数aには0、1、2は指定可能ですが、範囲外のインデックス(4、5、100、5000などを指定するとIndexErrorになります。)

KeyError

KeyErrorは、辞書型に対してキーを指定して取得する際に、存在しないキーを指定した際に発生するエラーです。KeyErrorが発生した場合には、定義した辞書に含まれるキーが正しいかどうか、指定したキーが存在するか確認しましょう。

dic = {"age": 30, "name": "AI太郎"}
dic["email"]

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'email'

キーの一覧を取得するkeys()メソッドも用意されているので確認が出来ます。

print(dic.keys())

出力結果

dict_keys(['age', 'name'])

ModuleNotFoundError

ModuleNotFoundErrorは、読み込んだモジュールが見つからない場合に発生するエラーです。ModuleNotFoundErrorが発生した場合は、モジュール名は正しいか、importしようとしたモジュールがインストールされているか確認してみましょう。

import AI

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'AI'

ZeroDivisionError

ZeroDivisionErrorは、数値に対する演算の際に、0で割り算等が行われた場合に発生するエラーです。※割り算等と記載したのは、除算/だけでなく、整数除算//、剰余演算%でも発生するためです。ZeroDivisionErrorが発生した場合は、割る数が0になっていないか確認しましょう。

a = 10
print(a / 0) # print(a // 0)でも同様にZeroDivisionErrorが発生します。

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

Pythonを効率よく学ぶには?

Pythonの基本文法やデータ分析の基礎や統計学基礎などは無料アカウント登録することで、利用可能です。

もしくは、データサイエンティストや機械学習エンジニアに質問し放題かつ、体系的に学べる動画コンテンツでデータ分析技術を学びたい方は、オンラインで好きな時間に勉強できるAI Academy Bootcampがオススメです。