Pythonお悩み解決

Pythonに関する疑問や悩みにこたえるブログです

【エラー解説】NameErrorとは?原因と対応方法

今回はPythonNameErrorについて解説します。

1. NameErrorとは

NameErrorPythonの組み込み例外の1つで、「名前が見つからなかった」というエラーです。

このエラーは、変数や関数などを参照した際、その名前が見つからなかった場合に発生します。

いくつか発生ケースを見てみましょう。

以下は、Python 3.10で実行しています。

変数名が見つからない

>>> colors = ["red", "green", "blue"]
>>> color
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'color' is not defined. Did you mean: 'colors'?

関数名が見つからない

>>> def add_one(num):
...     return num + 1
...
>>> add_ona(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'add_ona' is not defined. Did you mean: 'add_one'?

クラス名が見つからない

>>> class Animal:
...     def __init__(self, name):
...         self.name = name
...
>>> my_pet = Animel("ポチ")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Animel' is not defined. Did you mean: 'Animal'?

他にも発生ケースは考えられますが、いずれも「指定した名前が見つからない」ことが原因で発生します。

エラーメッセージの末尾に、Did you mean: 'colors'?のように間違えている名前の候補が表示されます。

これをヒントに、名前の指定が正しいかを確認するとよいでしょう。

ちなみに、エラーメッセージの末尾にあるDid you mean:以降の部分は、Python 3.10以降で表示されるようなりました。

Python 3.9以前では、以下のようにDid you mean:は表示されません。

>>> # Python 3.9 で実行した場合
>>> colors = ["red", "green", "blue"]
>>> color
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'color' is not defined

なお、NameErrorが発生するのは、ローカルまたはグローバルの名前が見つからなかった場合です。

辞書のキー名や、オブジェクトの属性名が見つからなかったには、別エラーが発生します(関連記事を参照)。

2. NameErrorの対応方法

NameErrorの原因は、タイプミスなど、単純なミスであることが多いです。

NameErrorが発生したら、指定した変数名や関数名が正しいかを確認しましょう。

3. まとめ

  • NameErrorは、参照した名前(変数名など)が見つからなかった場合に起きるエラー
  • NameErrorが発生したら、指定した名前が正しいかを確認する

関連記事

python-onayami.com