PythonのNameErrorとは?意味・原因・直し方を初心者向けに解説

ながみえ

Pythonでコードを書いていると、NameErrorというエラーが表示されることがあります。

特に、変数名のスペルを間違えたときや、まだ作っていない変数を使ったときに発生しやすいエラーです。エラーメッセージには、NameError: name 'xxx' is not defined のように表示されることが多く、「is not definedってどういう意味?」と戸惑う方も多いと思います。

NameErrorは、Python初心者がつまずきやすいエラーの1つです。ただし、原因は比較的見つけやすく、変数名や関数名、コードの順番を確認すれば解決できることが多いです。

この記事では、PythonのNameErrorの意味、よくある原因、エラー例、修正方法、確認ポイントを初心者向けに解説します。

Pythonでよく出るエラーを一覧で確認したい方は、「Pythonエラー一覧」も参考にしてください。

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド

NameErrorとは

NameErrorとは、Pythonが指定された名前を見つけられないときに発生するエラーです。

ここでいう「名前」とは、変数名や関数名などのことです。たとえば、まだ作っていない変数を使ったり、変数名のスペルを間違えたりすると、Pythonはその名前を認識できません。その結果、NameErrorが表示されます。

たとえば、次のコードを見てみましょう。

print(message)

このコードでは、message という名前を使っています。しかし、この前に message という変数を作っていない場合、Pythonは「messageという名前が見つかりません」と判断します。

そのため、次のようなエラーが表示されます。

NameError: name 'message' is not defined

is not defined は、日本語にすると「定義されていません」という意味です。つまり、name 'message' is not defined は「messageという名前は定義されていません」という意味になります。

初心者のうちは、NameErrorを「Pythonがその変数名や関数名を見つけられなかったときのエラー」と考えると分かりやすいです。

たとえば、次のように先に変数を作ってから使えば、NameErrorは発生しません。

message = "こんにちは"
print(message)

このコードでは、1行目で message という変数を作り、2行目でその変数を使っています。Pythonは上から順番にコードを実行するため、使う前に変数が定義されていれば問題なく動きます。

NameErrorが出たときは、まずエラーメッセージに表示されている名前を確認しましょう。そして、その名前がコードの中で正しく定義されているか、スペルが合っているか、使う順番が間違っていないかを見直すことが大切です。

NameErrorが起きる主な原因

NameErrorは、Pythonが指定された名前を見つけられないときに発生します。

特に初心者の場合は、変数名のスペルミスや、変数を定義する前に使っているケースが多いです。また、Pythonでは大文字と小文字が区別されるため、自分では同じ名前を書いたつもりでも、実際には別の名前として扱われていることがあります。

NameErrorが起きる主な原因を整理すると、次のようになります。

原因内容確認すること
変数名のスペルミス定義した変数名と、使っている変数名が違うつづりが一致しているか
大文字・小文字の違いnameName のように、文字の大小が違う大文字と小文字まで同じか
定義する前に使っている変数を作る前に、その変数を使っているコードの順番が正しいか
文字列のクォーテーション忘れ文字列を変数名として扱われている文字列を " "' ' で囲んでいるか
関数名のスペルミス存在しない関数名を呼び出している関数名のつづりが正しいか
スコープの問題変数を使えない場所で使っている関数の中と外の違いを確認する

たとえば、message という変数を作ったのに、あとで messege と書いてしまうと、Pythonは別の名前だと判断します。この場合、messege という変数は定義されていないため、NameErrorになります。

また、Pythonではコードが上から順番に実行されます。そのため、変数を作る前に print() などで使おうとすると、Pythonはその変数をまだ知らない状態です。このような場合も、NameErrorが発生します。

NameErrorが出たときは、いきなり難しく考える必要はありません。まずは、エラーメッセージに表示されている名前を見て、その名前が正しく定義されているかを確認しましょう。

多くの場合、つづり、定義する順番、大文字と小文字のどれかを見直すことで解決できます。

NameErrorのエラー例と修正例

ここからは、実際にNameErrorが発生するコードと、その修正例を見ていきます。

NameErrorは、エラーメッセージだけを見ると難しく感じるかもしれません。しかし、原因の多くは「名前が間違っている」「まだ作っていない名前を使っている」「使える場所を間違えている」のどれかです。

1つずつ確認していきましょう。

変数名のスペルミス

NameErrorで特に多いのが、変数名のスペルミスです。

次のコードでは、1行目で message という変数を作っています。

message = "こんにちは"
print(messege)

しかし、2行目では messege と書いています。

Pythonでは、messagemessege は別の名前として扱われます。そのため、Pythonは messege という変数を見つけられず、NameErrorを表示します。

修正するには、変数名のつづりをそろえます。

message = "こんにちは"
print(message)

このように、定義した変数名と使う変数名を同じにすれば、エラーは解消できます。

変数名が長くなるほど、スペルミスは起きやすくなります。NameErrorが出たときは、まずエラーメッセージに表示されている名前を、コード内で探してみましょう。

大文字と小文字を間違えている

Pythonでは、大文字と小文字が区別されます。

たとえば、nameName は同じように見えるかもしれませんが、Pythonでは別の名前として扱われます。

次のコードを見てみましょう。

name = "太郎"
print(Name)

1行目では name という変数を作っています。しかし、2行目では Name と書いています。

Pythonにとって、nameName は別の変数です。そのため、Name という変数は定義されていないと判断され、NameErrorになります。

修正するには、大文字と小文字をそろえます。

name = "太郎"
print(name)

初心者のうちは、変数名をすべて小文字で書くようにすると、このようなミスを減らしやすくなります。

たとえば、UserNameuserName のように大文字を混ぜるよりも、user_name のように小文字とアンダースコアで書くと読みやすくなります。

変数を定義する前に使っている

Pythonは、コードを上から順番に実行します。

そのため、変数を作る前に使おうとすると、Pythonはその変数をまだ知りません。

次のコードでは、score を作る前に print(score) を実行しようとしています。

print(score)
score = 80

この場合、1行目の時点では score という変数がまだ作られていません。そのため、Pythonは score という名前を見つけられず、NameErrorを表示します。

修正するには、変数を使う前に定義します。

score = 80
print(score)

Pythonでは、「使う前に作る」という順番が大切です。

変数を使っている行だけでなく、その前の行に定義があるかどうかも確認しましょう。

文字列にクォーテーションを付け忘れている

文字列を表示したいだけなのに、NameErrorが出ることもあります。

これは、文字列にクォーテーションを付け忘れている場合によく起こります。

次のコードを見てみましょう。

print(hello)

人間が見ると、「helloという文字を表示したい」と分かるかもしれません。

しかし、Pythonでは " "' ' で囲まれていない文字は、文字列ではなく変数名として扱われます。そのため、Pythonは hello という変数を探します。

もし hello という変数を定義していなければ、NameErrorになります。

文字列として表示したい場合は、クォーテーションで囲みます。

print("hello")

日本語の文字列でも同じです。

print("こんにちは")

文字としてそのまま表示したいものは、必ず " " または ' ' で囲みましょう。

関数名を間違えている

NameErrorは、変数名だけでなく、関数名を間違えたときにも発生します。

たとえば、print() のつづりを間違えると、Pythonはその関数を見つけられません。

次のコードでは、print と書くべきところを pritn と書いています。

pritn("こんにちは")

Pythonには、pritn という標準の関数はありません。そのため、pritn という名前が定義されていないと判断され、NameErrorになります。

修正するには、関数名のつづりを正しく書きます。

print("こんにちは")

関数名のミスは、見た目では気づきにくいことがあります。

特に、printinputrangelen など、よく使う関数のつづりは確認しておきましょう。

関数の中と外で変数の使える範囲を間違えている

NameErrorは、変数を使える場所を間違えたときにも発生します。

Pythonでは、関数の中で作った変数は、基本的に関数の外からは使えません。この「変数を使える範囲」のことをスコープといいます。

次のコードを見てみましょう。

def greet():
    message = "こんにちは"

greet()
print(message)

このコードでは、message という変数を greet() 関数の中で作っています。

しかし、最後の行では、関数の外で message を使おうとしています。関数の中で作った message は、基本的に関数の外では使えないため、NameErrorになります。

修正方法の1つは、変数を関数の中で使うことです。

def greet():
    message = "こんにちは"
    print(message)

greet()

このコードでは、message を作った場所と使う場所がどちらも関数の中にあります。そのため、NameErrorは発生しません。

また、関数の外でも使いたい場合は、関数の外で変数を定義する方法もあります。

message = "こんにちは"

def greet():
    print(message)

greet()

このコードでは、message を関数の外で定義しています。そのため、関数の中からも参照できます。

ただし、初心者のうちは、まず「関数の中で作った変数は、基本的に関数の中で使う」と考えると分かりやすいです。

NameErrorが出たときの確認ポイント

NameErrorが出たときは、エラーメッセージに表示されている名前を手がかりにすると、原因を見つけやすくなります。

エラーを見ると焦ってしまうかもしれませんが、NameErrorは確認する順番を決めておくと解決しやすいエラーです。まずは、次のポイントを上から順番に確認しましょう。

  1. エラーメッセージに表示されている名前を確認する
  2. 変数名や関数名のスペルが合っているか確認する
  3. 大文字と小文字を間違えていないか確認する
  4. 変数を使う前に定義しているか確認する
  5. 文字列にクォーテーションを付け忘れていないか確認する
  6. 関数の中と外で、変数を使える範囲を間違えていないか確認する

すべてを一度に確認しようとしなくても大丈夫です。

エラーメッセージに表示された名前を見て、「スペル」「大文字と小文字」「定義する順番」「使える場所」の順番で確認すると、原因を見つけやすくなります。

NameErrorに関するよくある質問

ここでは、PythonのNameErrorについて、初心者が疑問に感じやすいポイントをQ&A形式で解説します。

NameErrorは、エラーメッセージに is not defined と表示されることが多いため、まずはその意味を理解しておくと原因を探しやすくなります。

NameError: name is not defined とはどういう意味ですか?

NameError: name 'xxx' is not defined は、「xxxという名前は定義されていません」という意味です。

ここでいう名前とは、変数名や関数名などのことです。たとえば、message という変数を作っていないのに print(message) と書くと、Pythonは message という名前を見つけられません。

その結果、NameErrorが表示されます。

print(message)

この場合、message という変数が定義されていないため、NameErrorになります。

修正するには、使う前に変数を定義します。

message = "こんにちは"
print(message)

is not defined と表示されたら、まずは「その名前を使う前に作っているか」を確認しましょう。

変数を定義しているのにNameErrorが出るのはなぜですか?

変数を定義しているつもりでも、NameErrorが出ることがあります。

よくある原因は、変数名のスペルミスや、大文字と小文字の違いです。Pythonでは、1文字でも違うと別の名前として扱われます。

たとえば、次のコードでは message を定義していますが、print() の中では messege と書いています。

message = "こんにちは"
print(messege)

この場合、Pythonは messege という変数を探します。しかし、定義されているのは message なので、NameErrorになります。

また、次のように大文字と小文字が違う場合も注意が必要です。

name = "太郎"
print(Name)

nameName は、Pythonでは別の名前です。変数を定義しているのにNameErrorが出る場合は、つづりだけでなく、大文字と小文字まで同じか確認しましょう。

文字列を表示したいだけなのにNameErrorが出るのはなぜですか?

文字列にクォーテーションを付け忘れている可能性があります。

Pythonでは、文字列は " " または ' ' で囲む必要があります。クォーテーションで囲まれていない文字は、文字列ではなく変数名として扱われます。

たとえば、次のコードを見てみましょう。

print(hello)

このコードでは、Pythonは hello を文字列ではなく、変数名として判断します。

もし hello という変数を定義していなければ、NameErrorになります。

文字として表示したい場合は、次のようにクォーテーションで囲みます。

print("hello")

日本語でも同じです。

print("こんにちは")

文字をそのまま表示したいときは、クォーテーションを付けることを忘れないようにしましょう。

NameErrorとUnboundLocalErrorの違いは何ですか?

NameErrorは、Pythonが指定された名前を見つけられないときに発生するエラーです。

一方、UnboundLocalErrorは、関数の中でローカル変数を代入する前に使おうとしたときに発生します。少し難しく感じるかもしれませんが、初心者のうちは「関数の中の変数の扱いで起きるエラー」と考えると分かりやすいです。

違いを整理すると、次のようになります。

エラー名意味よくある原因
NameError名前が見つからない変数名のミス、定義前の使用
UnboundLocalError関数内の変数を代入前に使っている関数の中で変数の使い方を間違えている

NameErrorは、名前そのものが見つからないときに出ます。UnboundLocalErrorは、名前はあるものの、関数の中で変数を使う順番や扱いに問題があるときに出ます。

関数を使っていないコードであれば、まずはNameErrorとして、変数名のスペルや定義位置を確認しましょう。

関数の中でNameErrorが出た場合はどうすればよいですか?

関数の中でNameErrorが出た場合は、その変数が関数の中で使える場所にあるかを確認しましょう。

Pythonでは、関数の中で作った変数は、基本的に関数の外では使えません。また、関数の外にある変数を使っているつもりでも、書き方によっては思ったように参照できないことがあります。

まずは、次のようにシンプルに考えると分かりやすいです。

def greet():
    message = "こんにちは"
    print(message)

greet()

このコードでは、message を関数の中で作り、同じ関数の中で使っています。そのため、NameErrorは発生しません。

一方で、関数の中で作った変数を外で使おうとすると、NameErrorになることがあります。

def greet():
    message = "こんにちは"

greet()
print(message)

この場合、message は関数の中で作られた変数です。関数の外では基本的に使えないため、NameErrorになります。

関数の中でNameErrorが出たときは、変数をどこで作って、どこで使っているかを確認しましょう。

まとめ|NameErrorは名前と定義位置を順番に確認しよう

NameErrorは、Pythonが指定された変数名や関数名を見つけられないときに発生するエラーです。

主な原因は、変数名のスペルミス、大文字と小文字の違い、変数を定義する前に使っていること、文字列のクォーテーション忘れ、スコープの間違いなどです。

エラーが出たときは、まずエラーメッセージに表示されている名前を確認しましょう。そのうえで、コード内のつづり、定義する順番、変数を使える場所を順番に見直すと、原因を見つけやすくなります。

NameErrorは初心者がよく出会うエラーですが、確認するポイントを覚えておけば落ち着いて対応できます。Pythonでよく出るエラーをまとめて確認したい方は、「Pythonエラー一覧」も参考にしてください↓↓

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド
記事URLをコピーしました