【Python】エラーの種類とその一覧(構文エラー・例外)

時計 2021.05.15 / 時計

【Python】エラーの種類とその一覧(構文エラー・例外)

本記事では、Pythonにおけるエラーの種類と、エラーの一覧を紹介・解説していきます。

Pythonで発生するエラーには、構文エラーと例外の2種類があります。

これらエラーを詳しく学ぶことは、プログラムを作成する上で非常に重要になります。

ぜひ本記事からPythonで発生するエラーについて学び、Pythonプログラミングに活かしてください。

エラーの種類

Pythonには様々なエラーが存在します。
エラーを大きく分けると構文エラー(syntax error)と例外(exception)の2種類に分けられます。

  • 構文エラー(syntax error)
  • 例外(exception)

構文エラー(syntax error)

構文エラーとは、Pythonが構文解析中に発生するエラーです。
つまりプログラムがPythonの構文(記述のルール)が誤っていると発生するエラーです。

多くのIDEやエディタでは、プログラムが実行される前にチェックしてくれます。

例えばインデントが間違っているとSyntaxErrorのサブクラスであるIndentationErrorが発生します。

if i == "OFFICE54":
print("OFFICE54")
# IndentationError: expected an indented block

上記では、if文後のprint文にインデントがないため、IndentationErrorが発生しています。
このように文法的に間違いがあると構文エラー(syntax error)が発生します。

例外(exception)

例外とは、構文は正しいけどプログラムの実行中に検知(発生)したエラーのことです。

例えば数値を0で割るとZeroDivisionErrorが発生します。

def divide(x):
    return 54 / x
print(divide(2))
print(divide(0))

#27.0
#Traceback (most recent call last):
#  File "C:\exception.py", line 4, in 
#    print(divide(0))
#  File "C:\exception.py", line 2, in divide
#    return 54 / x
#ZeroDivisionError: division by zero

上記では、divide(0)で54を0で割ることによって、例外ZeroDivisionErrorが発生しています。

例外に関してはtry~except文による例外処理を施すことにより、例外が発生してもプログラムを止めることなく、プログラムを続行させることができます。

そのためプログラムを作成する上で、例外が発生する可能性のあるコードには、例外処理を行い、例外が発生してもプログラムが止まらないようにすることが重要です。

例外処理とは「プログラム実行中に例外が発生した場合に、プログラムを止めないように、どのような処理を行うかを記述すること」を意味します。

エラーメッセージについて

Pythonプログラムを実行し、構文エラーまたは例外が発生するとエラーメッセージが表示されます。

Traceback (most recent call last):
File "C:\exception.py", line 4, in 
   print(divide(0))
File "C:\exception.py", line 2, in divide
   return 54 / x
ZeroDivisionError: division by zero

上記のようにエラーメッセージにはエラーが発生したファイル名、エラーが発生した行番号、エラー内容が表示されます。

最終行のエラー内容には、エラーの種類とその説明が記載されています。
英語で表記されていますが、Google翻訳など使えば、だいたいのエラー内容が理解できます。

構文エラーの種類

SyntaxError

SyntaxErrorはプログラムの構文が誤っている場合に発生します。

例えば括弧()が少ない・多いときや、シングルコーテーション・コロンが少ないといった場合にSyntaxErrorが発生してしまいます。

print('OFFICE54'))
# SyntaxError: invalid syntax

IndentationError

条件分岐や繰り返し処理では、複数の文を一つのブロックとして記述します。
Pythonではこのブロックにインデント(字下げ)を使用します。

このインデントが正しくないとIndentationErrorが発生します。

if i == "OFFICE54":
print("OFFICE54")
# IndentationError: expected an indented block

IndentationErrorはSyntaxErrorのサブクラスです。

例外の種類

ZeroDivisionError

値は0で割ることはできません。そのためプログラム中で値を0で割ってしまうとZeroDivisionErrorが発生します。

つまりZeroDivisionErrorは、割り算や剰余計算で割る側が0の場合に発生するエラーです。

def divide(x):
    return 54 / x
print(divide(0))
# ZeroDivisionError: division by zero

UnicodeError

UnicodeErrorとは、エンコードやデコード時に発生するUnicodeに関連するエラーです。

パスに使われている“\”がエスケープシーケンスとしてみなされることで、以下のようなUnicodeErrorが発生することがあります。

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

上記の原因や解決方法については、以下記事をご参照ください。

UnicodeDecodeError

UnicodeDecodeErrorとは、デコード時に発生するUnicodeに関連するエラーです。
UnicodeErrorのサブクラスです。

ファイルの文字コードと、読み込み時に指定した文字コードが異なる際に、以下のようなUnicodeDecodeErrorが発生します。

UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence

上記の原因や解決方法については、以下記事をご参照ください。

IndexError

IndexErrorとは、リストやタプルにおいて添字が範囲外を指定している場合に発生するエラーです。

IndexError: list index out of range

IndexErrorに関しては、以下記事で詳しく解説しています。

NameError

NameErrorとは、ローカルやグローバルで名前が見つからなかった場合に発生するエラーです。
つまり、定義していない名前の変数や関数などを使った場合に発生するエラーです。

if x==1:
    print("1")
# NameError: name 'x' is not defined

TypeError

TypeErrorはPythonでプログラムを作成しているとしばしば発生するエラーです。

関数呼び出しの際に関数に渡す引数の数が正しくないときや、関数に渡すべき引数が足りていないとき、データ型が異なる変数を比べたときなど、様々な場面で発生するエラーです。

Typeエラーの具体的な原因や解決方法は、以下記事を参照ください。

まとめ

本記事「【Python】エラーの種類とその一覧(構文エラー・例外)」はいかがでしたか。

Pythonでプログラムを作成していれば必ず一度はエラーが発生します。
どんなに優れたプログラマーでもエラーは発生してしまいます。

エラーが発生したことに嘆くのではなく、それがどういったエラーなのかを瞬時に見分け、対応することが非常に大切です。

本記事で紹介したエラー以外にもまだまだエラーは存在します。
エラーが発生した都度、エラーメッセージを理解して、対応するようにしてください。