AI AIワークナビ AI Work Studio
メニュー
AIワークナビ ホーム

PythonのNameError: name ‘score’ is not definedを直す|変数名と代入順

結論

NameError: name 'score' is not definedは、Pythonがscoreという名前を探しても、その時点で値との結び付きを見つけられないときに発生します。

まずエラー最終行の名前を確認し、次の順番で直してください。

  1. 使う前に代入しているか
  2. 変数名のつづりと大文字・小文字が一致しているか
  3. 条件によって代入されない経路がないか

発生している問題

次のコードは、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で試す手順

  1. AI Work Studioを開きます。
  2. 左のPythonファイルmain.pyを選びます。
  3. 修正前コードを貼り、Pythonを実行を押します。
  4. Consoleの最後にNameError: name 'score' is not definedが出ることを確認します。
  5. 代入をprint()より前へ移動し、もう一度実行します。
  6. Consoleに点数: 80と表示されることを確認します。

同じ画面でつづり違いと条件分岐の例も試すと、名前が未定義になる3つの原因を見分けやすくなります。

まとめ

NameError: name 'score' is not definedが出たら、エラーに書かれた名前、代入の位置、つづり、条件分岐を順番に確認します。

値を使う前に代入し、すべての実行経路で必要な名前が定義されるように直せば、NameErrorは解消できます。

関連記事

公式情報