Code Fix

初級

NameError: name 'x' is not defined の原因と直し方

定義していない変数を参照したときに出る、最も頻出のエラーの一つです。タイプミス・宣言忘れ・似た名前との混同のパターンを整理します。

エラーメッセージの読み方

Traceback (most recent call last):
main.py
ファイル名
2
行番号 — 実際にクラッシュした行
<module>
発生場所 — <module> ならトップレベル、関数名ならその関数の中
NameError
例外クラス — 何が起きたか。ここを検索するのが最短です
name 'cout' is not defined. Did you mean: 'count'?
詳細メッセージ — どの値が問題だったか

このエラーが出る典型パターン

パターン1

 1  count = 10
 2  print(cout )
            ^
Traceback (most recent call last): File "main.py", line 2, in <module> print(cout) ^^^^ NameError: name 'cout' is not defined. Did you mean: 'count'?

C++のcoutとの混同や単純な打ち間違いで起きます。似た名前の変数が定義されていると、Pythonが候補を提示してくれます。

直し方: coutcount にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  x = 5
 2  print(y  )
           ^
Traceback (most recent call last): File "main.py", line 2, in <module> print(y) ^ NameError: name 'y' is not defined

定義されていない名前を参照すると発生します。似た名前が存在しない場合は「Did you mean」の提案も出ません。

直し方: yx にします。

この問題を解いてみる →

パターン3

 1  price = 100
 2  tax_rate = 0.1
 3  print(price + tex_rate)
                      ^
Traceback (most recent call last): File "main.py", line 3, in <module> print(price + tex_rate) ^^^^^^^^ NameError: name 'tex_rate' is not defined. Did you mean: 'tax_rate'?

スネークケースの変数名はタイプミスに気づきにくいです。1文字違いでも別の名前として扱われます。

直し方: tex_ratetax_rate にします。

この問題を解いてみる →

よくある誤解

似た名前の変数が定義されているとき、Pythonは「Did you mean」で候補を提示してくれますが、常に出るわけではありません。似た名前が存在しない完全な打ち間違いでは出ないので、油断できません。

まとめ

NameError: name 'x' is not definedは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)