MeWrite Docs

NameError: name 'x' is not defined

Pythonで定義されていない変数や関数を使用した際のエラー

概要

Pythonで定義されていない変数、関数、クラスなどの名前を参照しようとした際に発生するエラーです。

エラーメッセージ

NameError: name 'x' is not defined
NameError: name 'my_function' is not defined

原因

  1. 変数の定義忘れ: 変数を使用する前に定義していない
  2. タイプミス: 変数名や関数名のスペルミス
  3. スコープの問題: 関数内で定義した変数を外から参照
  4. インポート忘れ: モジュールや関数をインポートしていない
  5. 定義順序: 関数を定義する前に呼び出している

解決策

1. 変数を使用前に定義

1
2
3
4
5
6
# Bad
print(message)  # NameError

# Good
message = "Hello"
print(message)

2. スペルミスを確認

1
2
3
4
5
6
7
# Bad
username = "John"
print(usernmae)  # NameError: タイプミス

# Good
username = "John"
print(username)

3. スコープを理解する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Bad
def greet():
    message = "Hello"

greet()
print(message)  # NameError: 関数内の変数

# Good: 戻り値を使用
def greet():
    message = "Hello"
    return message

result = greet()
print(result)

# Good: グローバル変数(非推奨)
message = None

def greet():
    global message
    message = "Hello"

greet()
print(message)

4. モジュールをインポート

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Bad
result = math.sqrt(16)  # NameError

# Good
import math
result = math.sqrt(16)

# Good: 関数を直接インポート
from math import sqrt
result = sqrt(16)

5. 定義順序を確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Bad
greet()  # NameError

def greet():
    print("Hello")

# Good
def greet():
    print("Hello")

greet()  # OK

6. 条件分岐での定義

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Bad
if condition:
    value = 10
print(value)  # conditionがFalseだとNameError

# Good: デフォルト値を設定
value = None
if condition:
    value = 10
print(value)

# Good: else句を追加
if condition:
    value = 10
else:
    value = 0
print(value)

7. リスト内包表記のスコープ

1
2
3
4
5
6
7
8
# Python 3では問題なし
squares = [x**2 for x in range(5)]
# print(x)  # Python 3ではNameError(リスト内包表記のスコープが独立)

# Good
for x in range(5):
    pass
print(x)  # 4(forループの変数は残る)

よくある間違い

  • True/Falsetrue/falseと書く(JavaScriptとの混同)
  • Nonenullと書く
  • ビルトイン関数名を上書きしてしまう(list = [1, 2, 3]など)

関連エラー

参考リンク

Python の他のエラー

最終更新: 2025-12-13