おねーちゃん!ここまでで色んなことを覚えてきたからPythonでできることは沢山増えたんだけど、実行しようとするとエラーで動かないってことが多くて困ってるんだよね...
エラーの説明は全部英語だし、エラーが出ている行が出てきてもどこがおかしいか分からないことが多くて何時間も進まなかったりで凄く萎えちゃうよ
それはよくあるよねぇ
エラーの対処は初心者だけじゃなくて、普段から仕事でプログラミングをやっている人でも苦戦することが多いから仕方ない部分なんだよ
だから今回は、エラーの中でも初心者がよくやってしまうエラーを中心に紹介していくね!
それはぜひ教えてほしい!
じゃあまず1つ目は1番よく目にするであろう「SyntaxError」の紹介
これこれ!よく見るエラーだ!
これは「構文エラー」といって、if文やループに「:」をつけ忘れたり、「(」はあるけど「)」が抜けている、「==」の部分が「=」になっているみたいな時に出てくるエラーだね
まだプログラムに慣れていない人だと形がおかしいって気付きにくいから、これが出た時は「:」や「)」、「==」みたいな記号の抜けがないか注目してみてね
記号の確認だね!りょーかい!!
2つ目は存在しない変数名を使おうとすると出てくる「NameError」
これは変数名が未定義の時に出てくるエラーなんだけど、大体は英語のスペルミスなことが多いかな
確かに使い慣れない英語だと間違えがちだから気をつけないとね!
3つ目は足し算や引き算の時に文字列を足そうとすると出てくる「TypeError」
これは他にも、関数に入れる引数のデータ型が正しくない時にも出てくるよ
TypeErrorの時は「type()」を使ってデータ型を確認してみると良さそうだね!
4つ目は配列の要素の数よりも大きいインデックス番号を指定した時に出てくる「IndexError」
外部から持ってきた配列や、2次元以上の配列を扱っていると要素の数が分からなくてエラーが出る場合があるから気をつけたいね
事前にちゃんと要素の数をチェックすることが大事だね
5つ目は辞書に存在しないキーを指定すると出てくる「KeyError」
これもキーの名前を間違えてることが多いから気をつけたいね
もしキーが存在しない場合でも情報を返してほしい時は「.get()」を使うと良さそうだね!
6つ目は値の形式が正しくない時にエラーになる「ValueError」
数字じゃない文字列を「int()」や「float()」で数値型に変換しようとする時にこのエラーが出ることが多いかな
何を変換しようとしているか事前の確認が大事そうだね!難しい時は変換の前に一回「print()」で表示してみたら良いかも
7つ目は存在しない関数を使った時にエラーになる「AttributeError」
特定のデータ型にしかない関数を使おうとすると、「そのデータ型にはその関数は無いよ」ってなるんだ
NameErrorみたいにスペル間違いや大文字小文字の間違いとかが原因ってことも多そうだね
8つ目はインデントが揃っていない時に出てくる「IndentationError」
if文やループを使う時にスペースキーを使ってるとインデントがズレてエラーが出ちゃうので、基本的には「tabキー」を使うようにしようね
ループの中にif文を作ったりするとインデントの回数が分からなくなっちゃうから気をつけないとだね
今回は8種類のエラーを紹介したから長くなっちゃったけど、実はこのエラーを利用したプログラムを書くことができるから、最後にそれを紹介しておくね
エラーを利用したプログラム?エラーが出るとプログラムは強制終了しちゃうよね??
そうだね!だけど、エラーが出た時にも続行する「try-except」っていうのがあるんだ
ほうほう
要は「エラー版のif文」みたいな感じ?
そういうことだね!
例えば6つ目に紹介した「ValueError」を利用して、数値型に変換できなかった時は変換しないってしてプログラムだとこんな感じ
おおー!これは便利だね!!
だけど、あまり乱用するのはオススメしないかな
え?なんで??
実は「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') |
