目次
エラーメッセージを解説
Pythonでコードのミスによるエラーの原因を解説します
残念ながら全て英語でエラーメッセージが表示されるため、「なぜ実行できないか」を理解するのが大変です
また初学者にとっては、正しく書いているつもりでもPythonが実行できないのがストレスになります
少しでも負担を軽減するため、エラーメッセージの意味を理解しましょう
エラーメッセージ一覧
Pythonでは実行画面に「エラー内容」が出力されるため、エラー修正が容易な言語です
一方で慣れないうちはなぜエラーが出ているのかが分かりにくくなっています
今回はエラーメッセージの一覧と、そのエラーが起きないようにする方法を合わせてご紹介します
エラーメッセージ | エラー内容 |
---|---|
NameError | タイピングミス |
SyntaxError | 文法ミス |
TypeError | データ型が違う |
ValueError | データ型は合っているが、値が違う |
AttributeError | オブジェクトに存在しない属性を指定 |
ZeroDivisionError | ゼロで割り算している |
IndexError | 存在しないインデックスを指定している |
KeyError | 辞書に対して存在しないキーを指定している |
IndentaionError | インデントがずれている |
ModuleNotFoundError | モジュールをインポートできない |
ImportError | モジュールに含まれないオブジェクト |
FileNotFoundError | 指定したファイルが見つからない |
NameError
prin('テキスト') #printが正解
NameErrorはタイピングミスです
文字が抜けていたり、無駄な文字が付いていたりすると発生します
大文字、小文字の書き間違いなどでもこのエラーは発生します
- 正しく関数・メソッドが書かれているか
- 事前に記述した変数名が正しいか
- タイプミスしていないか
SyntaxError
print('クォーテーションが足りない)
SyntaxErrorは文法ミスです
クォーテーション(‘ ‘)(” “)やカッコ( )、コロン:が足りないことによっておこるエラーです
長くコードを書く場合は特に忘れやすい項目なので、注意してください
- クォーテーションの最初と最後がそろっているか
- カッコの最初と最後がそろっているか
- 繰り返し処理forや条件分岐ifなどで、コロンが適切に書かれているか
TypeError
len(3)
TypeErrorはデータ型のミスです
上記の例では引数に指定すべきではない「数値型」を指定しているため、データ型のエラーが発生しています
- 関数に渡すデータ型が正しいか
ValueError
int('one')
ValueErrorはデータ型は正しいが、適切な値ではないエラーです
上記例では「文字列型」を「数値型」に変換するintに対して、文字列である「one」を指定してエラーが出ています
※Pythonは「one=1」を理解できない
- 関数に渡す値が正しいか
AttributeError
text = 'テキスト'
text.a
AttributeErrorはオブジェクトに存在しない属性を指定した場合のエラーです
上記では存在しない「a」属性を指定しているためエラーが発生しています
使い方を見直すか、単純なタイプミスなので確認してみましょう
- オブジェクト名が正しいか
- オブジェクトの使い方が正しいか
ZeroDivisionError
3/0
ZeroDivisionErrorはゼロで割り算を実施しようとしているエラーです
数学的に「ゼロ」では割ることができないため、エラーが発生します
- 対象のデータに「ゼロ」が含まれていないか
IndexError
temp = [0,1,2]
temp[5]
IndexErrorリストなどで存在しないインデックスを指定すると発生するエラーです
範囲を超えたインデックス値を指定すると発生します
Pythonは「0」始まりでデータを数えるため、インデックスは(データ数 – 1)となり注意が必要です
- 範囲内のインデックスを指定しているか
- 「0」から始まるのを注意する
KeyError
temp = {'key1':'あ','key2':'い','key3':'う'}
temp['key5']
KeyErrorは辞書の値に対して、存在しないキーを指定してしまった場合のエラーです
- 対象のKeyが存在しているか
ちなみにkeysを利用すると、辞書のキーのみを取得することができます
list(temp.keys())
IndentaionError
for i in range(5):
print(i)
IndentaionErrorはインデント(階層)のエラーです
同じ階層であるべきインデントがずれている場合に発生します
特に繰り返し処理forや条件分岐のif、関数defなどの記述で注意してください
- 正しいインデント(階層)になっているか
ModuleNotFoundError
import pands as pd #pandasが正
ModuleNotFoundErrorはモジュールをインポートできないときに発生するエラーです
タイプミスでモジュール名の記載が間違っている場合や、そもそもインストールされていないモジュールを指定している場合が考えられます
- モジュール名が正しいか
- 事前にモジュールをインストールしているか(pipコマンドなど)
ImportError
from sklearn.svm import svc
ImportErrorはモジュールに含まれないオブジェクトをインポートする際のエラーです
そもそもモジュールに含まれていないオブジェクトや、大文字・小文字のタイプミスもエラーの対象になります
※上記は「svc」ではなく「SVC」が正解
- 対象モジュールにオブジェクトが含まれているか
- モジュール名が正しいか
- オブジェクト名が正しいか
FileNotFoundError
pd.read_csv('test.csv')
FileNotFoundErrorはファイルを読み込む際に指定したファイルが見つからないエラーです
Google CorabolatoryではGoogle Driveとの連携がされていないと同様のエラーが発生します
- 指定したファイルが存在しているか
- ファイル名が正しいか
- パス名が正しいか
- Google CorabolatoryがGoogle Driveと連携しているか
まとめ
今回はPythonでコードのミスによるエラーの原因を解説してきました
「エラーとの戦い」は全てのプログラミング学習者が通る道なので、ぜひエラーと向き合ってください