Pythonの「*** is not defined」とは何かを現役エンジニアが解説【初心者向け】

初心者向けにPythonの「*** is not defined」について現役エンジニアが解説しています。is not definedのエラーは、未定義であることを意味しています。スペルミスによる変数へのアクセスやスコープ外のメソッドやプロパティを呼び出そうとしているケースが考えられます。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

Pythonの「*** is not defined」とは何かについて解説します。

そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPython講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonの「*** is not defined」について詳しく説明していくね!

大石ゆかり

お願いします!

 

Pythonの例外「%lt;name> is not defined」とは

Pythonの例外「<name> is not defined」とは、参照した <name> シンボルが未定義である(定義する前に <name> シンボルを参照した)ことを示しています。

エラーメッセージを手がかりにソースコードを修正し、未定義のシンボルを参照しないようにします。
 

エラーの例と原因

事例1

例として以下のようなコードを想定します。
 

a = None
print(b)

 
このコードを実行すると、以下の例外が発生します。
 

NameError Traceback (most recent call last)
      1 a = None
----> 2 print(b)

NameError: name 'b' is not defined

 
エラーメッセージの通り、NameError例外が発生しました。原因は、未定義の変数bを参照しているためです。

上の例では、「変数aを定義している」「未定義の変数bを参照している」ため、エラー原因が自明でした。
一方、以下のようなスペルミスの場合、原因に気づきにくくなります。1行目はm”o”deですが、2行目はm”0″deとなっています。
 

mode = 0
print(m0de)

 

事例2

スコープ外のメソッドや変数を参照しようとした場合にも、「<name> is not defined」の例外が発生します。

例として以下のようなコードを想定します。
 

def method():
  var = 0
print(var)

 
このコードを実行すると、以下の例外が発生します。
 

NameError Traceback (most recent call last)
      2   var = 0
----> 3 print(var)

NameError: name 'var' is not defined

 
1,2行目でのmethodメソッド内で、var変数を定義しています。

3行目でvar変数を参照しようとしていますが、スコープが異なる
(var変数はmethodメソッド内でのみ有効)ため、例外が発生しました。
 

[PR] Pythonで挫折しない学習方法を動画で公開中

監修してくれたメンター

橋本紘希

システムインテグレータ企業勤務のシステムエンジニア。

開発実績: Javaプログラムを用いた業務用Webアプリケーションや、基幹システム用バッチアプリケーションなどの設計構築試験。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でPythonを使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。