タイトル画像
琴葉葵

おねーちゃん!ここまでで色んなことを覚えてきたからPythonでできることは沢山増えたんだけど、実行しようとするとエラーで動かないってことが多くて困ってるんだよね...

琴葉葵

エラーの説明は全部英語だし、エラーが出ている行が出てきてもどこがおかしいか分からないことが多くて何時間も進まなかったりで凄く萎えちゃうよ

琴葉茜

それはよくあるよねぇ
エラーの対処は初心者だけじゃなくて、普段から仕事でプログラミングをやっている人でも苦戦することが多いから仕方ない部分なんだよ

琴葉茜

だから今回は、エラーの中でも初心者がよくやってしまうエラーを中心に紹介していくね!

琴葉葵

それはぜひ教えてほしい!

琴葉茜

じゃあまず1つ目は1番よく目にするであろう「SyntaxError」の紹介

解説画像1
琴葉葵

これこれ!よく見るエラーだ!

琴葉茜

これは「構文エラー」といって、if文やループに「:」をつけ忘れたり、「(」はあるけど「)」が抜けている、「==」の部分が「=」になっているみたいな時に出てくるエラーだね

琴葉茜

まだプログラムに慣れていない人だと形がおかしいって気付きにくいから、これが出た時は「:」や「)」、「==」みたいな記号の抜けがないか注目してみてね

琴葉葵

記号の確認だね!りょーかい!!

琴葉茜

2つ目は存在しない変数名を使おうとすると出てくる「NameError」

解説画像2
琴葉茜

これは変数名が未定義の時に出てくるエラーなんだけど、大体は英語のスペルミスなことが多いかな

琴葉葵

確かに使い慣れない英語だと間違えがちだから気をつけないとね!

琴葉茜

3つ目は足し算や引き算の時に文字列を足そうとすると出てくる「TypeError」

解説画像3
琴葉茜

これは他にも、関数に入れる引数のデータ型が正しくない時にも出てくるよ

琴葉葵

TypeErrorの時は「type()」を使ってデータ型を確認してみると良さそうだね!

琴葉茜

4つ目は配列の要素の数よりも大きいインデックス番号を指定した時に出てくる「IndexError」

解説画像4
琴葉茜

外部から持ってきた配列や、2次元以上の配列を扱っていると要素の数が分からなくてエラーが出る場合があるから気をつけたいね

琴葉葵

事前にちゃんと要素の数をチェックすることが大事だね

琴葉茜

5つ目は辞書に存在しないキーを指定すると出てくる「KeyError」

解説画像5
琴葉茜

これもキーの名前を間違えてることが多いから気をつけたいね

琴葉葵

もしキーが存在しない場合でも情報を返してほしい時は「.get()」を使うと良さそうだね!

琴葉茜

6つ目は値の形式が正しくない時にエラーになる「ValueError」

解説画像6
琴葉茜

数字じゃない文字列を「int()」や「float()」で数値型に変換しようとする時にこのエラーが出ることが多いかな

琴葉葵

何を変換しようとしているか事前の確認が大事そうだね!難しい時は変換の前に一回「print()」で表示してみたら良いかも

琴葉茜

7つ目は存在しない関数を使った時にエラーになる「AttributeError」

解説画像7
琴葉茜

特定のデータ型にしかない関数を使おうとすると、「そのデータ型にはその関数は無いよ」ってなるんだ

琴葉葵

NameErrorみたいにスペル間違いや大文字小文字の間違いとかが原因ってことも多そうだね

琴葉茜

8つ目はインデントが揃っていない時に出てくる「IndentationError」

解説画像8
琴葉茜

if文やループを使う時にスペースキーを使ってるとインデントがズレてエラーが出ちゃうので、基本的には「tabキー」を使うようにしようね

琴葉葵

ループの中にif文を作ったりするとインデントの回数が分からなくなっちゃうから気をつけないとだね

琴葉茜

今回は8種類のエラーを紹介したから長くなっちゃったけど、実はこのエラーを利用したプログラムを書くことができるから、最後にそれを紹介しておくね

琴葉葵

エラーを利用したプログラム?エラーが出るとプログラムは強制終了しちゃうよね??

琴葉茜

そうだね!だけど、エラーが出た時にも続行する「try-except」っていうのがあるんだ

解説画像9
琴葉葵

ほうほう
要は「エラー版のif文」みたいな感じ?

琴葉茜

そういうことだね!
例えば6つ目に紹介した「ValueError」を利用して、数値型に変換できなかった時は変換しないってしてプログラムだとこんな感じ

解説画像10
琴葉葵

おおー!これは便利だね!!

琴葉茜

だけど、あまり乱用するのはオススメしないかな

琴葉葵

え?なんで??

琴葉茜

実は「except」の箇所には具体的なエラー内容を書かなくても良いんだけど、そうするとどこでエラーが発生したか分からなくなっちゃうんだ

琴葉茜

それに、表示上ではちゃんとプログラムが動いて見えてるから、とても重大な欠陥に気付きにくくなるんだよね

琴葉葵

確かに!!

琴葉茜

まぁでも、ここまでちゃんと進めてくれているなら用法・容量を正しく守ってくれるだろうから、どうしてもっていう時は上手く使ってみてね!

琴葉葵

まるで風邪薬...!!

琴葉茜

最後に今回紹介したエラーとその他によく出会うエラーについて表にしておいたから、困った時は確認してね!

エラー名説明よくある原因
SyntaxError
文法エラー
カンマ・コロン・カッコ忘れなど
if x = 5:if x == 5:
NameError
変数名が未定義
スペルミスや定義前に使用
print(valeu)
TypeError
型が合っていない
文字列と数値の計算など
'abc' + 123
IndexError
リストなどの範囲外アクセス
要素数より大きなインデックスを使った
mylist[10](要素が5個しかない)
KeyError
辞書に存在しないキーを指定
キーのスペル間違いや存在確認なし
mydict['age']('age'が存在しない)
ValueError
値の形式が正しくない
文字列をintに変換しようとしたときなど
int('abc')
AttributeError
存在しない属性や関数を使った
型に対して存在しないメソッドを呼び出し
[].appendleft(1)(deque専用)
IndentationError
インデント(字下げ)が不正
スペースとタブの混在、段差ミスなど
if x == 5: の下にインデントがない
ZeroDivisionError
0で割り算をした
1 / 0 のような計算
print(10 / 0)
ImportError
モジュールの読み込みに失敗
モジュール名の間違いや未インストール
import numppy
ModuleNotFoundError
存在しないモジュールの指定
pip install 忘れなど
import requests(未インストール)
FileNotFoundError
ファイルが見つからない
指定パスの誤りや存在しないファイル
open('data.txt')(実在しない)
PermissionError
ファイルや操作に対して権限がない
読み取り専用に書き込みしようとした等
open('/system/file', 'w')