機械学習の講師をしている株式会社キカガクの安藤です!
本記事では、Python でよくあるエラーを10 種類、確認方法や解決方法を交えて紹介します!
目次
エラーの確認方法
エラーを確認する手順は以下の通りです。

上記の基本的な流れを押さえた上で、Python の代表的なエラー 10 種類、そして解決方法をご紹介します!
- SyntaxError
- NameError
- TypeError
- ValueError
- IndentationError
- IndexError
- KeyError
- ModuleNotFoundError
- FileNotFoundError
- 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')
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
int
、str
については下記事をご確認ください。参考 数値型 int, float, complex組み込み型-Python 3.9.4 ドキュメント 参考 テキストシーケンス型 --- str組み込み型-Python 3.9.4 ドキュメント
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
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 3.9.4 ドキュメント 参考 属性・メソッドクラス-Python 3.9.4 ドキュメント
最後に
Python のエラーを解決方法を交えて紹介いたしました。
今回ご紹介した Python の代表的なエラーと基本的な解決方法を把握しておく事で、基礎的な部分の解決はもちろん、ご紹介したエラー以外のものが出た際でも対応しやすくなります。
エラー名を把握した上で、エラーの具体的な内容を把握する、こちらの流れを是非実践してみてください!
もし、動画でよく起こるエラーについて学習したい!という方は、元副社長の動画がおすすめです。
皆様の参考になれば幸いです!
参考リンク
参考 Python 3.9.14 ドキュメント大人気コース「Python & 機械学習入門コース」が無料!
現在 e ラーニングプラットフォーム「キカガク」に無料登録すると、これまで多くの方にご受講頂いた、Python の基礎から機械学習の数学やプログラミングまでを学べる大人気コース「Python & 機械学習入門コース」が無料です。
好評である手書きの数学とハンズオン形式のプログラミングを通じて、初学者でも数学の理論から実装まで一から学習できます。また、動画で丁寧に解説しているため、迷うことなく最後まで継続して学習しやすいです。
Python の基礎から機械学習を学習したい方は、ぜひ教材の1つとしてご利用ください!