ホーム › エラー解決 › Python › NameError
Python ERROR

Python NameError: name is not defined の解決法

使おうとした名前(変数・関数)が定義されていないときのエラーです。スペルミスと定義順が主な原因です。

このエラーメッセージ

NameError: name 'mesage' is not defined

原因

❌ エラーになるコード

NG
message = "Hello"
print(mesage)

✅ 修正したコード

OK
message = "Hello"
print(message)
▶ 修正済みコードを実行エディタで開く
progoのPython実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

エラーメッセージに出ている名前と、定義した名前が一致しているか確認します。大文字小文字も区別されます(Messageとmessageは別物)。また、変数は使う前に代入しておく必要があります。

原因を1つずつ確認する

関数の中だけで NameError(スコープ)

関数の外で定義した変数は関数の中から読むことはできますが、関数の中で定義した変数は外からは見えません。

def show():
    msg = "hello"
show()
print(msg)   # NameError: name 'msg' is not defined

関数の結果を外で使いたいときは return で返します。

▶ return で値を返すコードを実行エディタで開く
progoのPython実行環境(インストール不要・登録不要)でその場で確認できます。

NameError と UnboundLocalError の違い

関数内で同じ名前に代入があると、その名前は関数のローカル変数扱いになります。代入より前に読むと UnboundLocalError: local variable 'x' referenced before assignment(NameErrorのサブクラス)になります。外の変数を書き換えたい場合は関数の先頭で global x と宣言します。

よくある質問

関数の中で外の変数が見えない
関数内で代入すると別のローカル変数になります。読むだけなら参照できますが、書き換えるにはglobalやreturnを検討します。
importしたのにNameError
import module した場合は module.func() のように呼びます。from module import func なら func() で呼べます。
name 'true' is not defined と出る
Pythonの真偽値は先頭大文字の True / False / None です。小文字で書くと未定義の名前として NameError になります。
UnboundLocalError との違いは?
その名前がどこにも無いのが NameError、関数内で代入があるのに代入前に読んだのが UnboundLocalError です。外の変数を書き換えたいなら global 宣言します。
print("x") でエラーになる
print "x" のようにカッコ無しで書くと Python3 では構文エラー、変数を渡すつもりの print(x) は x が未定義だと NameError です。文字列はクォートで囲みます。