3. エラーメッセージの読み方:トレースバックを解析する
Pythonでエラーが発生すると、「Traceback(トレースバック)」と呼ばれる情報が表示されます。
これは、エラーがどこで、どのように発生したかを詳しく記録した「エラー発生の履歴書」のようなものです。
具体的なエラーメッセージの例を見てみましょう。
以下は、print 関数を prit と間違えて記述した場合に発生するエラーです。
print("こんにちは")
prit("世界") # printのtypo
このコードを実行すると、以下のようなエラーメッセージが表示されます。
Traceback (most recent call last):
File "main.py", line 2, in <module>
prit("世界")
NameError: name 'prit' is not defined
このメッセージの各部分を順に見ていきましょう。
1. Traceback (most recent call last):
これは「トレースバックがここから始まる」という意味です。エラーが呼び出された順序が逆順に表示されます。
2. File "main.py", line 2, in <module>
エラーが発生したファイルの場所(main.py)、行番号(line 2)、そしてそれがどの部分で発生したか(<module> はプログラムのトップレベル)を示しています。
この情報から、main.py の2行目に問題があることがわかります。
3. prit("世界")
これは、実際にエラーが発生したコードの行です。この行に問題がある、と具体的に教えてくれています。
4. NameError: name 'prit' is not defined
これがエラーの種類と、その詳細な説明です。
NameError:存在しない変数や関数名を呼び出そうとしたときに発生するエラーです。
name 'prit' is not defined:「prit という名前は定義されていません」という意味です。
このメッセージから、「prit という名前のものはPythonにないから、print の間違いではないか?」と推測できるわけです。
補足だよ
Pythonには、NameError 以外にも多くのエラーの種類があります。例えば、SyntaxError(文法間違い)、TypeError(型の不一致)、IndexError(リストの範囲外アクセス)などです。それぞれのエラー名が、問題の手がかりになります。
もう一つ、構文エラーの例を見てみましょう。条件分岐 if 文でコロン : を忘れた場合です。
# 別のエラー例:構文エラー
if 1 == 1
print("正しい")
このコードを実行すると、以下のようなエラーメッセージが表示されます。
File "main.py", line 2
if 1 == 1
^
SyntaxError: expected ':'
この場合、SyntaxError というエラーの種類が表示され、expected ':' と具体的に何が足りないのかを教えてくれます。
^ の記号は、エラーが発生しているおおよその位置を示しています。