PythonのNameError: name ‘score’ is not definedを直す|変数名と代入順
結論
NameError: name 'score' is not definedは、Pythonがscoreという名前を探しても、その時点で値との結び付きを見つけられないときに発生します。
まずエラー最終行の名前を確認し、次の順番で直してください。
- 使う前に代入しているか
- 変数名のつづりと大文字・小文字が一致しているか
- 条件によって代入されない経路がないか
発生している問題
次のコードは、scoreへ値を入れる前にprint()で読み取っています。
print(score)
score = 80
ローカルPython 3.14.2とAI Work StudioのPython 3.12で実行すると、どちらも最後に次のエラーが表示されました。
NameError: name 'score' is not defined
Pythonは上から順番に処理します。2行目に代入があっても、1行目を実行する時点ではscoreがまだ存在しないため、後ろの代入を先に使うことはできません。
原因
Python公式ドキュメントでは、ローカルまたはグローバルの名前が見つからないときにNameErrorが発生すると説明されています。代入文は、名前と値を結び付ける処理です。
今回の原因は、scoreを読み取る処理が、score = 80より先にあることです。文法自体は正しいのでSyntaxErrorではありません。実行が始まり、未定義の名前を読む行で停止します。
修正前コード
print(score)
score = 80
エラー全文には実行環境の内部行も表示されますが、初心者は最後のNameErrorと、その直前に示される自分のコード行を確認すれば原因を絞れます。
修正後コード
値を使う前に代入します。
score = 80
print(f"点数: {score}")
実行結果
修正後は、ローカルとAI Work Studioで同じ結果になりました。
点数: 80
終了までエラーはなく、標準入力も不要です。
よくある間違い
変数名のつづりが違う
user_nameへ代入したのに、アンダースコアのないusernameを読むと別の名前として扱われます。
user_name = "Sakura"
print(username)
実行結果は次のとおりです。
NameError: name 'username' is not defined
同じ名前へそろえます。
user_name = "Sakura"
print(f"名前: {user_name}")
名前: Sakura
PythonではScoreとscoreも別の名前です。似た候補を示すDid you meanが表示される環境もありますが、候補をそのまま信じず、代入側の名前と比較してください。
条件分岐の中だけで代入する
logged_inがFalseならifの中は実行されません。そのため、次のlogin_messageは未定義のままです。
logged_in = False
if logged_in:
login_message = "ようこそ"
print(login_message)
NameError: name 'login_message' is not defined
どの条件でも使う値は、分岐の前に初期値を入れます。
logged_in = False
login_message = "ログインしてください"
if logged_in:
login_message = "ようこそ"
print(login_message)
ログインしてください
エラーをexceptで隠す
except NameErrorで表示だけ消しても、変数名や処理順の間違いは残ります。まず未定義になった名前と代入位置を直し、意図した値が出ることを確認してください。
AI Work Studioで試す手順
- AI Work Studioを開きます。
- 左のPythonファイル
main.pyを選びます。 - 修正前コードを貼り、
Pythonを実行を押します。 - Consoleの最後に
NameError: name 'score' is not definedが出ることを確認します。 - 代入を
print()より前へ移動し、もう一度実行します。 - Consoleに
点数: 80と表示されることを確認します。
同じ画面でつづり違いと条件分岐の例も試すと、名前が未定義になる3つの原因を見分けやすくなります。
まとめ
NameError: name 'score' is not definedが出たら、エラーに書かれた名前、代入の位置、つづり、条件分岐を順番に確認します。
値を使う前に代入し、すべての実行経路で必要な名前が定義されるように直せば、NameErrorは解消できます。
関連記事
- Pythonのよくあるエラー5選|ブラウザ実行で原因と直し方を確認
- PythonのValueError: invalid literal for int()を直す|整数に変換できない原因
- PythonのIndexError: list index out of rangeを直す|リスト範囲外の原因