#はじめに
こんにちは。文系出身のシステムエンジニア1年生です。
Pythonの資格試験に向け勉強していたところ、
エラーに関する部分がなかなか面白かったので、忘れないようここに整理しておこうと思います。
#エラーには2種類ある
間違ったプログラムを動かそうすると発生するエラー。
これらは大きく2つの種類に分けることが出来ます。
一つはそもそも動かない(動かすことが出来ない)もの
。
もう一つは動くけれど途中で止まってしまうもの
です。
一般的に前者はエラー(構文エラー)、後者は例外と呼ばれます。
今回取り上げるのは前者の**エラー(構文エラー)**です。
こちらはPythonにおける文法上の間違いによって起きていることが多いので、
原因を特定しやすい = 修正しやすいエラーであると言えます。
エラーメッセージというと、発生する度にどうしても怒られている感じがして苦手だったのですが、
よくよく調べてみると、かなり具体的に間違いを指摘してくれていたようです。
以下、その種類と原因について簡単にまとめてみました。
#エラーの種類と主な原因
###SyntaxError
プログラムが文法的に間違っているときに出るエラー。
「文法が違うのでこの構文は無効だよ!」と怒られている。
記号の漏れなど、ちょっとしたミスが要因になっていることが多い。
▼ここをチェック!
- カンマ(,)の記入漏れはないか?
- クォーテーション(''や"")が片方欠けていないか?
- カッコを閉じ忘れていないか?
- 関数の中のコロン(:)が抜けていないか?
###NameError
定義されていない変数が使われたときに出るエラー。
「そんな変数は定義されていないので知らない!」と怒られている。
▼ここをチェック!
- 変数を定義し忘れていないか?
- 間違った名前で定義していないか?(こちらの可能性の方が高いかも)
###ValueError
型は正しいが、引数に間違った値を渡している場合に起きるエラー。
「その値、なんか間違ってるよ!」と怒られている。
▼ここをチェック!
- 関数に渡した値は適切か?
例)float型(浮動小数点型)の引数にstring型(文字列型)の値を入れている
###TypeError
型が間違っているときに出るエラー。
「型が違うのでそんな処理は出来ないよ!」と怒られている。
先ほどのValueErrorとの違いに注意。
▼ここをチェック!
- 違う型同士の計算など、無茶な処理をしようとしていないか?
例)1 + '2' (int型+string型) → 数字と文字列は足し算出来ない…
###IndexError
リストの範囲外のインデックスを指定した時に起こるエラー。
「リストの中にそんなインデックスはないよ!」と怒られている。
※インデックス‥‥リスト(配列)の中の要素が何番目かを指すもの
▼ここをチェック!
- 正しいインデックスを指定しているか?
(インデックスを数えるときは"0"から始まることに注意!)
###IndentationError
インデントが間違っているときに出るエラー。
「空白の部分がなんかおかしいよ!」と怒られている。
先ほどのIndexErrorと字面が似ているので注意。
※インデント…プログラミングを記述するときの字下げ部分(空白)のこと
▼ここをチェック!
- 余計な空白を入れてしまっていないか?
- 他の行とインデントが一致していない箇所はないか?
###KeyError
辞書型で登録していない値を指定したときに出るエラー。
「そんなKeyはないよ!」と怒られている。
▼ここをチェック!
- 存在しないKeyを指定していないか?
- スペルを間違えていないか?
☆メモ☆
辞書型は Keyが":"の左、Valueが右です。例){ Key1:Value1 , Key2:Value2, … }
『Key(鍵)を使って、Value(値)を取り出す』という順番で覚えておくと思い出しやすいです。
(たまに分からなくなりませんか…?)
###ModuleNotFoundError
インポートされていないモジュールを使おうとすると起きるエラー。
英文そのままの意味で「そんなモジュールは見つからないよ!」と怒られている。
▼ここをチェック!
- モジュールのインポート文を書き忘れていないか?
- モジュール名のスペルは正しいか?
###AttributeError
オブジェクトにないメソッドや属性を使用すると起きるエラー。
「そんなメソッド(属性)は存在しないよ!」と怒られている。
原因はさまざまだが、「AttributeError:…」に続く文章で何が違うのか指摘してくれることも多い。
▼ここをチェック!
- メソッドのスペルは正しいか?
- 自分でクラスやメソッドを作った場合、その中でミスが起きていないか?
#さいごに
今回は特によく起きるエラーについて簡単にまとめてみました。
出てくるとなんだか不安になるエラーメッセージですが、きちんとその原因やヒントを伝えてくれていたんですね。
もちろんコピペして検索にかけてしまうのも手ですが、
ある程度種類を覚えておくと、間違いを(怒りながら)教えてくれる心強い味方が出来るかもしれません。
次回はもう1種類のエラーである**「例外」**について取り上げてみたいと思います!
ありがとうございました!