PythonのNameErrorとその対処方法
Pythonでプログラムを書いていると、時々"NameError"というエラーメッセージが表示されることがあります。これは定義されていない変数や関数、クラスを参照しようとしたときに発生します。
Pythonのエラー一覧はコチラ
-
【Python】よく起こるエラー一覧 11個のPythonのエラー事例と対処方法を確認して、適切に対処しよう!
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 Python ...
続きを見る
1. 変数が未定義の場合
まず、一番よく発生するケースとして、変数が未定義の場合を見てみましょう。
1 2 |
# 未定義の変数を参照 print(x) |
このコードを実行すると以下のようなエラーメッセージが表示されます。
出力結果
NameError: name 'x' is not defined
これは変数xが定義されていないために起こります。対策としては、変数を適切に定義することです。
1 2 3 |
# 変数を定義 x = 10 print(x) |
修正後のコードを実行するとエラーが消え、出力結果は以下のとおりです。
出力結果
10
KindleUnlimited会員であれば、全ての本をご覧頂けます。 リストとラムダ式を理解すれば、Pythonプログラミングの世界が変わる 第1版
2. スコープ外の変数を参照した場合
次に、スコープ外の変数を参照したときに発生するエラーについて見てみましょう。
1 2 3 4 5 |
# スコープ外の変数を参照 def my_func(): print(y) my_func() |
このコードを実行すると以下のようなエラーメッセージが表示されます。
出力結果
NameError: name 'y' is not defined
これは関数内で定義されていない変数yを参照しようとしたためです。関数内で使う変数は関数内で定義するか、引数で渡す必要があります。
1 2 3 4 5 6 |
# スコープ内で変数を定義 defmy_func(): y = 20 print(y) my_func() |
修正後のコードを実行するとエラーが消え、出力結果は以下のとおりです。
出力結果
20
3. タイプミスによるNameError
タイプミスもよくあるエラーの原因です。変数名や関数名を間違えて入力してしまうとNameErrorが発生します。
1 2 3 |
# タイプミスによるエラー name = "John" print(nmae) |
このコードを実行すると以下のようなエラーメッセージが表示されます。
出力結果
NameError: name 'nmae' is not defined
これは、'name'の綴りを間違えて'nmae'と入力してしまったために発生します。タイプミスは細心の注意を払って確認しましょう。
1 2 3 |
# タイプミスを修正 name = "John" print(name) |
修正後のコードを実行するとエラーが消え、出力結果は以下のとおりです。
出力結果
John
4. モジュールや関数が未インポートの場合
Pythonで外部ライブラリを使用する際には、それをインポートする必要があります。インポートせずに使用しようとするとNameErrorが発生します。
1 2 |
# pandasをインポートせずに使用 df = pd.DataFrame() |
このコードを実行すると以下のようなエラーメッセージが表示されます。
出力結果
NameError: name 'pd' is not defined
これは、pandasライブラリをインポートせずにDataFrameを作成しようとしたためです。必要なライブラリは最初にインポートしましょう。
1 2 3 |
pandasをインポート import pandas as pd df = pd.DataFrame() |
修正後のコードを実行するとエラーが消え、DataFrameが作成されます。
5. ローカル変数とグローバル変数の混乱
関数内でグローバル変数を更新しようとしてエラーが発生することもあります。
1 2 3 4 5 6 7 |
# グローバル変数を更新しようとする z = 10 def update_z(): z = z + 1 return z update_z() |
このコードを実行すると以下のようなエラーメッセージが表示されます。
出力結果
UnboundLocalError: local variable 'z' referenced before assignment
これは関数内でグローバル変数zを更新しようとしたためです。関数内でグローバル変数を更新するにはglobalキーワードを使用します。
1 2 3 4 5 6 7 8 |
# グローバル変数を更新 z = 10 def update_z(): global z z = z + 1 return z update_z() |
修正後のコードを実行するとエラーが消え、出力結果は以下のとおりです。
出力結果
11
まとめ
PythonのNameErrorは、変数や関数、クラスなどが適切に定義されていないときに発生します。原因となるケースは多岐にわたりますが、基本的には定義前の参照を避け、スコープを理解し、タイプミスに注意することで対処できます。また、ライブラリの使用では適切なインポートを忘れずに、グローバル変数とローカル変数の使い分けも理解しておくことが重要です。
最後まで読んで頂き、ありがとうございました。
Pythonのエラー一覧はコチラ
-
【Python】よく起こるエラー一覧 11個のPythonのエラー事例と対処方法を確認して、適切に対処しよう!
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 Python ...
続きを見る