【Python】エラーメッセージ(例外)の読み方:トレースバックの見方

時計 2023.05.07 / 時計

【Python】エラーメッセージ(例外)の読み方:トレースバックの見方

記事ではPythonにおける、エラーメッセージ(例外)の読み方について解説していきます。

プログラムを実行すると例外が発生してプログラムが停止することは多々あります。例外が発生した際に重要なのが素早く原因を特定して修正することです。

例外の原因を特定するためにはエラーメッセージ(トレースバック)を読めることが必要になります。

本記事を通して、エラーメッセージの読み方について理解を深めてください。

Python:エラーの種類(構文エラーと例外)

Pythonで発生するエラーには以下2種類が存在します。

Pythonのエラーの種類
  • 構文エラー(syntax error)
  • 例外(exception)

構文エラーはPythonの構文(記述のルール)が誤っている際に発生するエラーであり、例外は構文は正しいがプログラム実行中に検知したエラーのことを意味します。

Pythonのエラーの種類について詳しくは以下記事を参考にしてください。

本記事では例外が発生した際のエラーメッセージについて解説していきます。

例外が発生した際のエラーメッセージ

エラーメッセージの構成

Pythonで記述したプログラムで例外を検出するとプログラムの実行を止めてエラーメッセージを出力します。以下にサンプルプログラムと実行後に表示される例外のエラーメッセージを記します。

# サンプルプログラム
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

上記のような例外によるエラーメッセージは「トレースバック」と「例外のメッセージ」の2つで構成されています。

例外のエラーメッセージの構成

トレースバック + 例外のメッセージ

トレースバックにはどこで例外が発生したか(行番号)や、エラーに至るまでにどんな関数が呼び出されたかの履歴が記載されています。上記のエラーメッセージでは2行目から6行目までがトレースバックです。

最終行には例外のメッセージが表示されます。上記のエラーメッセージではZeroDivisionErrorという例外のメッセージが出ています。これはゼロで割り算をしたことで発生する例外です。

エラーメッセージの読み方

次に例外のエラーメッセージの読み方について解説していきます。ここでは以下プログラムと実行時に表示されるエラーメッセージを元に解説します。

def office54():
    print("office54()を実行")
    office55()

def office55():
    print("office55()を実行")
    x = 54 / 0

office54()
office54()を実行
office55()を実行
Traceback (most recent call last):
  File "test.py", line 9, in 
    office54()
  File "test.py", line 3, in office54
    office55()
  File "test.py", line 7, in office55
    x = 54 / 0
ZeroDivisionError: division by zero

トレースバックは「Traceback (most recent call last):」という文言から始まります。これより上記のエラーメッセージではトレースバックは3行目から始まっていることがわかります。

トレースバックの中身より、7行目のoffice55()関数内で例外が発生していることがわかります。このoffice55()関数は3行目のoffice54()関数内で呼び出されており、office54()関数は9行目で呼び出されています。

このトレースバックで重要なのがトレースバックの最後の内容です。なぜならそこが例外が発生した行だからです。表示されている行番号は例外を検出した行だということです。その行番号の前後でエラーの原因があると考えられます。そして最終行に例外のメッセージが表示されています。

これらの情報(例外を検出した行や例外のメッセージ内容)からエラーの原因を見つけ出してプログラムを修正します。

例外発生時の例外処理

例外が発生するとプログラムは処理をストップします。そこで例外が発生してもプログラムの処理を止めずに、プログラムの処理を継続させる方法として例外処理があります。

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

例外処理について詳しくは以下記事を参考にしてください。

まとめ

本記事「【Python】エラーメッセージ(例外)の読み方:トレースバックの見方」はいかがでしたか。

エラーメッセージを読めるようになって、プログラムで発生する例外をすぐに対処できるようになりましょう。