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つです。

  1. 変数を定義していない

  2. 変数名を間違えている

  3. 文字列をクォーテーションで囲んでいない

  4. 関数名を間違えている

  5. importを忘れている

  6. 変数のスコープが原因

順番に見ていきましょう。


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エラー一覧と対処法に種類別でまとめています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら