今回はPythonのNameError
について解説します。
1. NameErrorとは
NameError
はPythonの組み込み例外の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
が発生したら、指定した名前が正しいかを確認する