NameError: name ‘xxx’ is not defined の原因と解決方法|Python初心者向けにわかりやすく解説

Pythonを実行していると、
NameError: name 'xxx' is not defined
というエラーが表示されることがあります。
これは、Pythonが「xxxという名前の変数・関数などを見つけられない」ときに発生する代表的なエラーです。
特にPython初心者の場合、
-
変数を定義する前に使っている
-
変数名を間違えている
-
文字列をクォーテーションで囲んでいない
-
関数名を間違えている
-
importを忘れている
-
変数のスコープを勘違いしている
といった原因で発生します。
この記事では、NameError: name 'xxx' is not defined の意味から、具体的な原因、解決方法、再発防止策までわかりやすく解説します。
NameError: name ‘xxx’ is not definedとは?
NameErrorは、Pythonが指定された名前を認識できない場合に発生するエラーです。
例えば、次のコードを実行します。
print(name)
しかし、nameという変数を事前に定義していなければ、
NameError: name 'name' is not defined
と表示されます。
つまり、
「
nameという名前を使っていますが、そんな名前は定義されていません」
という意味です。
エラーメッセージの読み方
NameError: name 'xxx' is not defined
を分解すると、次のようになります。
| 表示 | 意味 |
|---|---|
NameError |
名前を認識できないエラー |
name 'xxx' |
xxxという名前 |
is not defined |
定義されていない |
そのため、
NameError: name 'price' is not defined
なら、priceという名前が定義されていないことが原因です。
NameErrorが発生する主な原因
NameError: name 'xxx' is not definedが発生する代表的な原因は、次の6つです。
-
変数を定義していない
-
変数名を間違えている
-
文字列をクォーテーションで囲んでいない
-
関数名を間違えている
-
importを忘れている
-
変数のスコープが原因
順番に見ていきましょう。
1. 変数を定義していない
最も基本的な原因です。
例えば、
print(price)
と書いた場合、priceを定義していなければエラーになります。
NameError: name 'price' is not defined
解決方法
priceを先に定義します。
price = 1000
print(price)
実行結果:
1000
Pythonでは、基本的に変数を定義してから使用する必要があります。
2. 変数名を間違えている
変数を定義しているのにNameErrorが発生する場合、変数名のスペルミスを疑いましょう。
例えば、
price = 1000
print(prcie)
この場合、定義しているのはpriceですが、print()ではprcieと入力しています。
そのため、
NameError: name 'prcie' is not defined
となります。
解決方法
変数名を正しく記述します。
price = 1000
print(price)
大文字・小文字にも注意
Pythonでは、大文字と小文字が区別されます。
Price = 1000
print(price)
これは別の名前として扱われます。
Priceとpriceは同じ変数ではありません。
3. 文字列をクォーテーションで囲んでいない
Python初心者が非常によく遭遇する原因です。
例えば、
print(Hello)
と書いた場合です。
Helloを文字列として表示したかったのであれば、
print("Hello")
と書く必要があります。
間違った例
print(Hello)
結果:
NameError: name 'Hello' is not defined
正しい例
print("Hello")
結果:
Hello
Pythonでは、
"Hello"
のようにクォーテーションで囲まれたものは文字列として扱われます。
一方、
Hello
と書くと、PythonはHelloという変数や名前として解釈します。
4. 関数名を間違えている
関数名のスペルミスでもNameErrorが発生します。
例えば、
pritn("Hello")
と入力すると、
NameError: name 'pritn' is not defined
となります。
正しくは、
print("Hello")
です。
printをpritnと入力しているため、Pythonはpritnという関数を見つけられません。
5. importを忘れている
外部ライブラリやモジュールを使用する場合、必要なものをimportする必要があります。
例えば、mathモジュールのpiを使用する場合、
print(math.pi)
だけではエラーになります。
NameError: name 'math' is not defined
解決方法
先にmathをimportします。
import math
print(math.pi)
実行すると、
3.141592653589793
のように表示されます。
importを忘れていないか確認する
NameErrorが出たら、
import xxx
が必要ではないか確認してみましょう。
6. 変数のスコープが原因
関数を使っている場合、変数のスコープが原因でNameErrorになることがあります。
例えば、
def test():
message = "Hello"
print(message)
この場合、messageはtest()関数の中で定義されています。
そのため、関数の外から直接、
print(message)
と書いても使用できません。
解決方法
関数の中で使用します。
def test():
message = "Hello"
print(message)
test()
実行結果:
Hello
このように、変数がどの範囲から利用できるのかを意識することが重要です。
NameErrorと似たエラーとの違い
Pythonには、NameErrorと似たエラーがいくつかあります。
特に初心者は、
-
NameError -
TypeError -
ValueError -
AttributeError -
UnboundLocalError
などを混同しやすいため、それぞれの違いを理解しておきましょう。
| エラー | 主な原因 |
|---|---|
NameError |
名前が定義されていない |
TypeError |
データ型や引数の使い方が不適切 |
ValueError |
値が適切ではない |
AttributeError |
オブジェクトに指定した属性がない |
UnboundLocalError |
ローカル変数を定義前に参照している |
例えば、
print(name)
でname自体が存在しなければNameErrorです。
一方、
"10" + 20
のように、異なる型を不適切に扱えばTypeErrorになります。
NameErrorが発生したときの確認方法
NameErrorが発生したら、次の順番で確認すると原因を見つけやすくなります。
① エラーが発生した行を確認する
例えば、
NameError: name 'price' is not defined
と表示されたら、まずpriceという名前を探します。
② その名前を定義しているか確認する
price = 1000
のような定義が存在するか確認します。
③ スペルを確認する
例えば、
user_name = "Taro"
print(username)
では、
user_name
と
username
が異なります。
アンダースコアの有無にも注意してください。
④ 大文字・小文字を確認する
Name = "Taro"
print(name)
では、Nameとnameが異なるためエラーになります。
⑤ 文字列ならクォーテーションを確認する
print(Hello)
ではなく、
print("Hello")
とする必要があります。
⑥ importを確認する
モジュールやライブラリを使っている場合は、
import math
などのimportがあるか確認します。
「name ‘xxx’ is not defined」が出たときの具体例
ここでは、よくあるパターンをまとめます。
パターン1:変数の定義忘れ
print(age)
↓
NameError: name 'age' is not defined
修正:
age = 20
print(age)
パターン2:スペルミス
username = "Taro"
print(usernmae)
修正:
username = "Taro"
print(username)
パターン3:文字列の囲み忘れ
name = Taro
Taroを文字列として扱いたいなら、
name = "Taro"
とします。
パターン4:import忘れ
print(math.sqrt(16))
修正:
import math
print(math.sqrt(16))
NameErrorを防ぐためのポイント
NameErrorを完全になくすことは難しいですが、いくつかの習慣によって発生頻度を下げられます。
変数名をわかりやすくする
例えば、
a = 1000
よりも、
price = 1000
のほうが意味がわかりやすくなります。
変数名がわかりやすければ、スペルミスにも気づきやすくなります。
エディタの補完機能を利用する
VS Codeなどのコードエディタには、変数名や関数名を補完する機能があります。
手入力を減らすことで、スペルミスを防ぎやすくなります。
エラーメッセージを読む
Pythonのエラーメッセージには、問題を解決するための重要な情報が含まれています。
例えば、
NameError: name 'total_price' is not defined
なら、
total_priceが定義されていない
ということがすぐにわかります。
「エラーが出たからコードが全部間違っている」と考えるのではなく、エラーが指摘している名前と行を確認することが重要です。
NameErrorを解決する基本手順
最後に、NameError: name 'xxx' is not definedが発生したときの手順をまとめます。
STEP1:エラーの名前を確認
NameError: name 'xxx' is not defined
なら、問題になっているのはxxxです。
STEP2:xxxをコード内で探す
print(xxx)
など、どこで使っているか確認します。
STEP3:定義されているか確認
xxx = ...
という定義があるか確認します。
STEP4:スペルを確認
user_name
と
username
などの違いがないか確認します。
STEP5:文字列ならクォーテーションを確認
print("xxx")
のように、文字列を"または'で囲んでいるか確認します。
STEP6:importを確認
モジュールを使用している場合は、必要なimportがあるか確認します。
STEP7:スコープを確認
関数内で定義した変数を関数の外で使っていないか確認します。
まとめ:NameErrorは「名前が見つからない」エラー
NameError: name 'xxx' is not definedは、Pythonがxxxという名前を見つけられないときに発生するエラーです。
主な原因は次のとおりです。
-
変数を定義していない
-
変数名を間違えている
-
大文字・小文字を間違えている
-
文字列をクォーテーションで囲んでいない
-
関数名を間違えている
-
importを忘れている -
変数のスコープを間違えている
特に初心者の場合は、まず「エラーメッセージに表示されたxxxが、本当に定義されているか?」を確認しましょう。
NameErrorはPythonプログラミングで非常によく遭遇するエラーですが、原因を理解すれば比較的簡単に解決できます。
エラーメッセージを読む習慣を身につけることが、Pythonを上達する近道です。
他のPythonエラーはPythonエラー一覧と対処法に種類別でまとめています。






