機械学習・ディープラーニングがゼロから学べる大人気『脱ブラ』が無料に!

Python のよくある基本的なエラーと確認方法まとめ。初学者向けにわかりやすく解説!

機械学習の講師をしている株式会社キカガクの安藤です!

本記事では、Python でよくあるエラーを10 種類、確認方法や解決方法を交えて紹介します!

エラーの確認方法

エラーを確認する手順は以下の通りです。

STEP.1
①エラー名の確認
STEP.2
②エラーの具体的な内容を確認

上記の基本的な流れを押さえた上で、Python の代表的なエラー 10 種類、そして解決方法をご紹介します!
本記事で解説する代表的な 10 種類のエラー
  1. SyntaxError
  2. NameError
  3. TypeError
  4. ValueError
  5. IndentationError
  6. IndexError
  7. KeyError
  8. ModuleNotFoundError
  9. FileNotFoundError
  10. AttributeError

1. SyntaxError

SyntaxError とは、コードの構文、書き方を間違えると起きるエラーです。

例えば、関数を下記のように誤った構文で定義すると、 SyntaxError が出力されます。

修正前
def hello()
  print('kikagaku')
エラー文
File "<ipython-input-1-4066c70d36ab>", line 1
 def hello()
           ^
SyntaxError: invalid syntax

上記の SyntaxError の場合、invalid syntax というエラーの内容が書かれており、直訳で無効な構文という意味になります。

解決方法は、正しい構文に書き換えることです。

今回であれば、def 構文の () の後に :(コロン)を入れなくはいけないため、下記のように修正すると、エラーが解決できます!

修正後
def hello():
  print('kikagaku')
他の SyntaxError の種類
()が足りない等のエラー
def hello():
  print('kikagaku'
エラー文
File "<ipython_input-1-37c872c02c9a>", line 2
print('kikagaku'
                ^
SyntaxError: unexpected EOF while parsing
不要なスペースが紛れ込む等のエラー
def hello():
# print の前に全角スペースが入ってしまっているエラー
   print('kikagaku')
エラー文
File "<ipython-input-2-a1e0843d1546>", line 1
    def hello():
       ^
SyntaxError: invalid character in identifier

2. NameError

NameError とは、定義していない変数名を使用した場合に起きるエラーです。

例えば、定義していない変数名を使用した場合、下記の NameError が出力されます。

修正前
hello
エラー文
NameError                             Traceback (most recent call last)
<ipython-input-3-e0807d390f82> in <module>()
----> 1 hello

NameError: name 'hello' is not defined
解決方法は、変数名のスペルミスを修正、もしくは変数が存在しない場合は変数を定義することです。

今回であれば、変数 hello が定義されていないため、下記のように定義すると、エラーが解決できます!

修正後
hello = 'kikagaku'
hello

3. TypeError

TypeError とは、データ型が間違えている場合等に起きるエラーです。

例えば、数値計算で文字列を使用すると、下記のような TypeError が出力されます。

修正前
1 + '1'
エラー文
TypeError                       Traceback (most recent call last)
<ipython-input-1-7ff5cb60d31b>in <module>()
----> 1 + '1'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

上記の TypeError の場合、unsupported operand type(s) for +: 'int' and 'str' というエラーの内容が書かれており、直訳で + 記号は int 型と str 型の計算ができないという意味になります。

解決方法は、正しいデータ型に修正することです。

今回であれば、数値計算に文字列が使用されているため、下記のように修正するとエラーが解決できます!

修正後
1 + 1

4. ValueError

ValueError とは、関数の引数に間違った型を渡した場合に起きるエラーです。

例えば、数値データ(int 型や float 型)を引数に取るものに対して、関数が処理できない値を渡した場合、下記のような ValueError が出力されます。

修正前
int('1.0')
エラー文
ValueError                            Traceback (most recent call last)
<ipython-input-3-ebd1f39da3f3> in <module>()
----> 1 int('1.0')

ValueError: invalid literal for int() with base 10: '1.0'

上記の ValueError の場合、invalid literal for int() with base 10: '1.0' というエラーの内容が書かれており、直訳で int() 関数において、10 進数に変換ができない無効な文字があるという意味になります。

解決方法は、関数の引数に渡す値を正しい値に修正することです。

今回であれば、int() 関数の引数に浮動小数点があったため、下記のように修正するとエラーが解決できます!

修正後
int('1')

5. IndentationError

IndentationError とは、インデントが正しくない場合に起きるエラーです。

インデントとは、字下げのことを指し、コードの行頭に半角スペースを挿入して先頭の文字を右にズラすことです。

例えば、インデントがズレていた場合、下記のような IndentationError が出力されます。

修正前
def hello():
  self.name = 'kikagaku'
   self.age = 0
エラー文
 File "<ipython-input-7-4986585684a4>", line 3
    self.age = 0
    ^
IndentationError: unexpected indent
上記の IndentationError の場合、unexpected indent というエラー内容が書かれており、直訳で予測されるインデントではないという意味になります。

解決方法は、インデントを正しく使用すること(揃えるなど)です。

今回であれば、関数内の self.age = 0 が後ろにズレてしまっていたため、下記のようにインデントを揃えるとエラーが解決できます!

修正後
def hello():
  self.name = 'kikagaku'
  self.age = 0
他の IndentationError の種類
必要とされるインデントがないエラー
def hello():
self.name = 'kikagaku'
self.age = 0
エラー文
File "<ipython-input-3-3659862ac94b>", line 2
    self.name = 'kikagaku'
       ^
IndentationError: expected an indented block

6. IndexError

IndexError とは、リスト等で格納された値をインデックスで取得する際に、範囲外の値を指定した場合に起きるエラーです。

インデックスとは、リスト等に格納された値が、その中で何番目かを示すものです。

例えば、下記のように numbers を定義し、範囲外の値を取得しようとした場合、IndexError が出力されます。

修正前
numbers = [0, 1, 2]
numbers[10]
エラー文
IndexError                          Traceback (most recent call last)
<ipython-input-9-b4bac35b834c> in <module>()
      1 numbers = [0, 1, 2]
----> 2 numbers[10]

IndexError: list index out of range
上記の IndexError の場合、list index out of range というエラー内容が書かれており、直訳でリストのインデックスが範囲外ですという意味になります。

解決方法は、リストにインデックスを追加するか、範囲内のインデックスを指定することです。

今回であれば、範囲外の値を指定していたため、下記のように修正するとエラーが解決できます!

修正後
numbers = [0, 1, 2]
numbers[2]

7. KeyError

KeyError とは、辞書型で登録した値をキー指定して取得する場合に、登録していないキーを指定した場合に起きるエラーです。

例えば、下記のように記述した場合、KeyError が出力されます。

修正前
city = {'北海道' : '札幌', '岩手' : '盛岡', '宮城' : '仙台'}
city['東京']
エラー文
KeyError                            Traceback (most recent call last)
<ipython-input-12-be52737b3620> in <module>()
      1 city = {'北海道' : '札幌', '岩手' : '盛岡', '宮城' : '仙台'}
----> 2 city['東京']

KeyError: '東京'
解決方法は、登録してあるキーを指定することです。

今回であれば、東京という登録していない値を指定していたため、下記のように修正するとエラーが解決できます!

修正後
city = {'北海道' : '札幌', '岩手' : '盛岡', '宮城' : '仙台'}
city['北海道']

8. ModuleNotFoundError

ModuleNotFoundError とは、指定したモジュールが存在しない場合に起きるエラーです。
例えば、下記のように記述した場合、ModuleNotFoundError が出力されます。

修正前
import nump as np
エラー文
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-b6dac4999c71> in <module>()
----> 1 import nump as np

ModuleNotFoundError: No module named 'nump'
解決方法は、存在するモジュールをインポートすることです。モジュール名のスペルミスを確認、また正しい場所からモジュールをインポートしましょう。

もしモジュールが存在しない場合は、pip コマンドでインストールしてください!

今回であれば、モジュールのnumpyが、nump とスペルミスをしているため、下記のように修正するとエラーが解決できます!

修正後
import numpy as np

9. FileNotFoundError

FileNotFoundErrorとは、指定したファイルが見つからない場合に起きるエラーです。

例えば、下記のように記述した場合、FileNotFoundErrorが出力されます。

修正前
file = open('sampl.txt')
エラー文
FileNotFoundError                  Traceback (most recent call last)
<ipython-input-20-a51dd50f8596> in <module>()
----> 1 file = open('sampl.txt')

FileNotFoundError: [Errno 2] No such file or directory: 'sample.txt'
解決方法は、正しいファイル名に修正するか、正しい指定フォルダにすることです。

今回であれば、ファイル名にスペルミスがあったため、下記のように修正するとエラーが解決できます!

修正後
file = open('sample.txt')

10. AttributeError

AttributeError とは、オブジェクトに存在しない属性・メソッドを使用した際に起きるエラーです。

例えば、以下のように存在しないメソッドを実行すると、AttributeError が出力されます。

修正前
kikagaku = 0
kikagaku.append(1)
エラー文
AttributeError                        Traceback (most recent call last)
<ipython-input-29-dcca80c34845> in () <module>()
      1 kikagaku = 0
----> 2 kikagaku.append(1)

AttributeError: 'int' object has no attribute 'append'
上記の AttributeError の場合、'int' object has no attribute 'append' というエラーの内容が書かれており、直訳でint 型(オブジェクト)には append メソッドがないという意味です。

解決方法は、オブジェクトに存在する属性・メソッドを使用すること、もしくは、オブジェクトを変更することです。

今回であれば、int 型(オブジェクト)には append メソッドが存在しないため、append メソッドが使えるオブジェクトに変える必要があります。

そのため、下記のようにリストで定義すると、エラーが解決できます!

修正後
kikagaku = [0]
kikagaku.append(1)

最後に

Python のエラーを解決方法を交えて紹介いたしました。

今回ご紹介した Python の代表的なエラーと基本的な解決方法を把握しておく事で、基礎的な部分の解決はもちろん、ご紹介したエラー以外のものが出た際でも対応しやすくなります。

エラー名を把握した上で、エラーの具体的な内容を把握する、こちらの流れを是非実践してみてください!

もし、動画でよく起こるエラーについて学習したい!という方は、元副社長の動画がおすすめです。

皆様の参考になれば幸いです!

参考リンク

参考 Python 3.9.14 ドキュメント

大人気コース「Python & 機械学習入門コース」が無料!

現在 e ラーニングプラットフォーム「キカガク」に無料登録すると、これまで多くの方にご受講頂いた、Python の基礎から機械学習の数学やプログラミングまでを学べる大人気コース「Python & 機械学習入門コース」が無料です。

好評である手書きの数学とハンズオン形式のプログラミングを通じて、初学者でも数学の理論から実装まで一から学習できます。また、動画で丁寧に解説しているため、迷うことなく最後まで継続して学習しやすいです。

Python の基礎から機械学習を学習したい方は、ぜひ教材の1つとしてご利用ください!