MAGAZINE

キャリテク!マガジン

コラム

Pythonのエラーメッセージの種類

こんにちは、吉政創成 菱沼です。

今回も「 Python によるネットワーク自動化の教科書」という書籍を片手に学習していきます。
Python に興味がある!
という超初心者の方、ぜひ一緒に学習していただければ幸いです。

さて、前回は繰り返し(ループ)処理について学びました。今回は Python のエラーメッセージについて学びます。

■Pythonのエラーは構文エラーと例外

Pythonに限った話ではありませんが、スクリプトの書き方にミスがあったり、動作できなかったりといった場合には、エラーメッセージが表示されます。Python のエラーは大きく分けると構文エラー( Syntax Error )と例外( exception )の二つです。

それぞれどういったときに発生するものかは後ほど書いていきますが、まずは種類を一覧にしてみます。

表示内容
SyntaxError構文が正しくない
IndentationErrorインデントが正しくない
ZeroDivisionError数値の演算時に0で割り算などが行われている
NameError変数名などが正しく書かれていないため参照できない
(大文字小文字は区別される)
TypeError異なるデータ型で演算や関数処理が行われている
ValueError値が正しくない場合に発生
IndexErrorリストやタプルの存在しないインデックス値を指定している
KeyError辞書型を参照する際、存在しないキーを指定している
AttributeErrorモジュールに存在しないオブジェクト名や識別子名を指定している
ImportErrorimport中に発生する
(存在しない、スペルミスなど)(大文字小文字は区別される)
ModuleNotFoundErrorImportErrorのサブクラス。
インポート対象のモジュールが存在しない時に発生する

テキストで紹介されているのは IndexError までなので、このコラムではその部分まで書いていきます。
ではそれぞれの項目を確認していきます。そのほかの項目については興味がありましたら調べて頂ければと思います。

なお、以降のエラー例の画像は特に引用箇所を書きませんが、テキストに書かれているものを試したものになります。

■構文エラー

構文に誤りがある場合に発生するエラー2つです。構文エラーが発生するとその時点で処理が停止し、次の処理に移ることはありません。

➢ Syntax Error

Syntax Error は括弧やコロンを忘れているなど、Python のコードの書き方として間違っているときなどに発生します。 テキストではprint関数の括弧を閉じるのを忘れていたケースと、if 文でコロンを忘れていたケースの二つが紹介されていました。

Python3 代では print 関数の書き方は[print()]です。上記の例だと()がないのでエラーが発生します。(Python2代は print 文の書き方は上記の例の書き方になるらしいです。)

次にコロンを忘れた場合、どのようになるかです。ここでは if 文で例が出されています。

if 文は最後に「:」をつけなくてはならないのでこちらも Syntax Errorが発生します。

➢ IndentationError

インデントが間違えている場合のエラーです。

本来、if 文の次に書かれている print 関数はインデントが空いているはずなのですが、ない状態で実行してみると、このように IndentationError が発生します。このように本来入れるべき箇所にインデントが入っていないときに出てきます。

■例外

ここからは例外処理です。
構文が正しかったとしても、プログラムの内容によっては予期しないエラーが発生することがありますが、そういったものは例外と呼ばれます。

また、構文エラーとは違い、例外はプログラム実行中に発生するもので、例外処理と呼ばれる回避のための処理を行っておけばそのままプログラムを走らせることが可能です。

➢ ZeroDivisionError

0で除算(/)、整数除算(//)、剰余演算(%)を使用とした場合に発生するエラーです。ゼロで除算しないようにするためには、条件式を設けるなどして回避する必要があります。


➢ NameError

指定された変数や、その他の名前が見つからなかった場合に発生します。変数名が定義されていないか、スペルミスがないかなどを確認する必要があります。


➢ TypeError

例えば足し算などをする際に、文字列型と整数型といったように、データ型が違うと発生します。処理前に同じデータ型にするための処理が必要です。


➢ ValueError

関数の引数に誤ったデータ型を渡した場合に発生します。正しいデータ型を使用して引数を渡せるようにします。


(おまけ)エラー箇所を見つけやすいのは3.10以降のバージョン

ところで、Pythonのバージョンによってはエラーメッセージが多少異なることがあります。というのも、3.10以降からエラーメッセージをより分かりやすいものにしていこうということで、徐々に改善されているためです。

ここまでに掲載した画像で利用しているPythonのバージョンは3.13(2024年リリース)で、コマンドラインから使用しています。どこにエラーがあるのかわかりやすいですし、色文字も使われていますので、どこに注意を引くべきかが把握しやすくなっています。

一方、3.9はどうだったかというと、こうなっていました。

違いが一目瞭然ですね。白文字一択ですし、TypeError があるのはわかりますが、どこで発生しているのかを探すのは、プログラムが長くなればなるほど大変です。
エラーメッセージが表示されても、どこをどうすれば…と涙目になったことがある身からすればなんとありがたいことでしょう。素敵。

3.13は最新バージョンなので、まだ多くのライブラリが対応していない可能性もありますが、学習するのに使う方にとっては学習しやすい環境なのではないかなと思います。

さて、ここまで「Pythonによるネットワーク自動化の教科書」のChapter1を学習してきましたが、今回をもって、こちらのコラムは終了となります。

この後、この章ではPythonをより学びやすい環境を整えるために、学習方法の選択肢やコミュニティへの参加のススメと言った内容が書かれています。
特にコミュニティへの参加は、一緒に学習する仲間や先輩を見つける場としておすすめなようです。

PyCon JPをはじめ、いろいろな団体がありますし、様々なイベントが開催されているようなので、自分に合いそうなコミュニティを探してみるのも良いのではと思います。

それでは、これまでお付き合いいただき、ありがとうございました。
未経験で、インフラエンジニアを目指す方は、AltX社の未経験者向けインフラエンジニア採用情報をご覧ください。
https://www.altx.co.jp/careetec/requirements/

関連記事

facebook シェアシェア
LINE シェアシェア