機械学習の講師をしている株式会社キカガクの安藤です!
本記事では、Python でよくあるエラーを 10 種類、確認方法や解決方法を交えてご紹介します!
Python を使っているとよく遭遇するエラーです。これらのエラーの対処法をマスターして Python をよりスムーズに使えるようにしましょう!
ゼロから始めるプログラミング
スモールステップで Python を基礎から学べる、初学者の方向けの講座です。演習問題を通して Python の使い方を理解し、データ分析や機械学習実装のための基礎を身につけることを目指します。
DX を推進する AI ・データサイエンス人材育成コース
プログラミング未経験から、AI やデータサイエンスを学ぶことのできる 6 ヶ月間のコースです。転職実績も豊富で、自走できる AI人材を多く輩出しています。
Python ではエラーが出た時にどう対処すればいいのか
Python でエラーを確認する基本的な手順は以下の通りです。
上記の基本的な流れを押さえた上で、Python の代表的なエラー 10 種類、そして解決方法をご紹介します!
- SyntaxError
- NameError
- TypeError
- ValueError
- IndentationError
- IndexError
- KeyError
- ModuleNotFoundError
- FileNotFoundError
- AttributeError
Python の代表的なエラーの解説と解決方法 10 選
1. SyntaxError
SyntaxError とは
SyntaxError
とは、コードの構文や書き方を間違えると起きるエラーです。
例えば Python の関数を下記のように誤った構文で定義すると SyntaxError
が出力されます。
def hello()
print('kikagaku')
File "<ipython-input-1-4066c70d36ab>", line 1
def hello()
^
SyntaxError: invalid syntax
上記の SyntaxError
の場合、invalid syntax
というエラーの内容が書かれており、直訳で無効な構文という意味になります。
SyntaxError が出たときの解決方法
解決方法は、正しい構文に書き換えることです。
今回であれば、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
とは、定義していない変数名を使用した場合に起きるエラーです。
例えば、定義していない変数名を使用した場合、下記の NameError
が出力されます。
hello
NameError Traceback (most recent call last)
<ipython-input-3-e0807d390f82> in <module>()
----> 1 hello
NameError が出たときの解決方法
解決方法は、変数名のスペルミスを修正、もしくは変数が存在しない場合は変数を定義することです。
今回であれば、変数 hello
が定義されていないため、下記のように定義するとエラーが解決できます!
hello = 'kikagaku'
hello
3. TypeError
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
型の計算ができないという意味になります。
TypeError が出たときの解決方法
解決方法は、正しいデータ型に修正することです。
今回であれば数値計算に文字列が使用されているため、下記のように修正するとエラーが解決できます!
1 + 1
4. ValueError
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 進数に変換ができない無効な文字があるという意味になります。
ValueError が出たときの解決方法
解決方法は、関数の引数に渡す値を正しい値に修正することです。
今回であれば、int()
関数の引数に浮動小数点があったため、下記のように修正するとエラーが解決できます!
int('1')
5. IndentationError
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
というエラー内容が書かれており、直訳で予測されるインデントではないという意味になります。
IndentationError が出たときの解決方法
解決方法は、インデントを正しく使用すること(揃えるなど)です。
今回であれば関数内の 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 とは
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
というエラー内容が書かれており、直訳でリストのインデックスが範囲外ですという意味になります。
IndexError が出たときの解決方法
解決方法は、リストにインデックスを追加するか、範囲内のインデックスを指定することです。
今回であれば、範囲外の値を指定していたため、下記のように修正するとエラーが解決できます!
numbers = [0, 1, 2]
numbers[2]
7. KeyError
KeyError とは
KeyError
とは、辞書型で登録した値をキー指定して取得する場合に、登録していないキーを指定した場合に起きるエラーです。
例えば、下記のように記述した場合、KeyError
が出力されます。
city = {'北海道' : '札幌', '岩手' : '盛岡', '宮城' : '仙台'}
city['東京']
KeyError Traceback (most recent call last)
<ipython-input-12-be52737b3620> in <module>()
1 city = {'北海道' : '札幌', '岩手' : '盛岡', '宮城' : '仙台'}
----> 2 city['東京']
KeyError: '東京'
KeyError が出たときの解決方法
解決方法は、登録してあるキーを指定することです。
今回であれば、東京という登録していない値を指定していたため、下記のように修正するとエラーが解決できます!
city = {'北海道' : '札幌', '岩手' : '盛岡', '宮城' : '仙台'}
city['北海道']
8. ModuleNotFoundError
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'
ModuleNotFoundError が出たときの解決方法
解決方法は、存在するモジュールをインポートすることです。モジュール名のスペルミスを確認、また正しい場所からモジュールをインポートしましょう。
もしモジュールが存在しない場合は、pip
コマンドでインストールしてください
今回であれば、モジュールのnumpy
が、nump
とスペルミスをしているため、下記のように修正するとエラーが解決できます!
import numpy as np
9. FileNotFoundError
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'
FileNotFoundError が出たときの解決方法
解決方法は、正しいファイル名に修正するか、正しい指定フォルダにすることです。
今回であれば、ファイル名にスペルミスがあったため、下記のように修正するとエラーが解決できます!
file = open('sample.txt')
10. AttributeError
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
メソッドがないという意味です。
AttributeError が出たときの解決方法
解決方法は、オブジェクトに存在する属性・メソッドを使用すること、もしくは、オブジェクトを変更することです。
今回であれば、int
型(オブジェクト)には append
メソッドが存在しないため、append
メソッドが使えるオブジェクトに変える必要があります。
そのため、下記のようにリストで定義すると、エラーが解決できます!
kikagaku = [0]
kikagaku.append(1)
オブジェクト、属性・メソッドについてはこちらをご確認ください。
参考 オブジェクト、値、および型データモデル-Python 3.9.4 ドキュメント
参考 属性・メソッドクラス-Python 3.9.4 ドキュメント
Python のよくあるエラーをマスターしてステップアップしよう!
Python のエラーを解決方法を交えて紹介いたしました。
Python の代表的なエラーと基本的な解決方法を把握しておく事で、基礎的な部分の解決はもちろん、この記事でご紹介したエラー以外のものが出た際でも対応しやすくなります。
エラー名を把握した上で、エラーの具体的な内容を把握する、こちらの流れをぜひ実践してみてください!
またよく起こるエラーについて動画で学習したい!という方は、キカガク元副社長の動画がおすすめです。
この記事が皆さまの参考になれば幸いです!
まずは無料で学びたい方・最速で学びたい方へ
まずは無料で学びたい方: Python&機械学習入門コースがおすすめ
AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!
最速で学びたい方:キカガクの長期コースがおすすめ
続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!
AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?
無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!
- 国も企業も育成に力を入れている先端 IT 人材とは
- キカガクの研修実績
- 長期コースでの学び方、できるようになること
- 料金・給付金について
- 質疑応答
参考リンク
ゼロから始めるプログラミング
スモールステップで Python を基礎から学べる、初学者の方向けの講座です。演習問題を通して Python の使い方を理解し、データ分析や機械学習実装のための基礎を身につけることを目指します。
DX を推進する AI ・データサイエンス人材育成コース
プログラミング未経験から、AI やデータサイエンスを学ぶことのできる 6 ヶ月間のコースです。転職実績も豊富で、自走できる AI人材を多く輩出しています。