Pythonで作ったシステムを動かしたら、
「Name error: name xxx is not defined」というエラーが出た。
原因と対処法を教えて!
了解!
代表的な原因と対処法をいくつか紹介するよ!
「Name error: name xxx is not defined」というエラーの原因と対処法を
Python歴3年の私が、できるだけわかりやすく解説し、解決に導きます。
「Name error: name xxx is not defined」エラーの原因
代表的な原因は以下の2つです。
- 変数名や関数名が間違っている
- 「del」を使っている
1つ1つ見ていきましょう。
「Name error: name xxx is not defined」はどんなエラー?
まず、「Name error: name xxx is not defined」はどんなエラーなのでしょうか。
直訳すると、「xxx は定義されていません」となり、簡単に言うと、以下のように返事されています。
- xxx なんて知りません
- xxx なんて聞いてませんけど…
- xxx が見つかりません
要約すると、「xxx がわからないからこれ以上プログラムを進められないよ!」と言ってきています。
なので、基本的には、「xxx を探す」か「xxx を ○○○に変更する」必要があります。
まずやるべきこと
「Name error: name xxx is not defined」というエラーが出たら、まずやるべきことがあります。
それは、「xxx」を構文内で検索することです。
検索できないソフトを使用している場合は、構文全てをメモ帳などにコピーし、検索してみましょう。
検索結果が1件以上必ずヒットします。
その前後の構文をチェックしましょう。
検索結果と前後の構文で、ある程度の原因と対処法が見えてきます。
では具体的な原因と対処法を見ていきましょう。
「Name error: name xxx is not defined」の原因と対処法
冒頭でも触れましたが、代表的な原因は以下の2つです。
- 変数名や関数名が間違っている
- 「del」を使っている
1つ1つ見ていきましょう。
変数名や関数名が間違っている
1つ目の原因は「変数名や関数名が間違っている」です。
私の経験上、一番多い原因がコレです。
以下のコードを見てください。
hensu = 1
print(hensuu)
実行結果:Name error: name ‘hensuu’ is not defined
「’hensuu’なんて聞いてません!」というエラーが出ました。
1行目で「hensu」に1を入れ、
2行目で「hensuu」をprint(表示)しようとしています。
プログラム側は、今まで出てきてない「hensuu」を表示するように言われて、「え?何それ?」と返事してきてるのです。
例えば知人があなたに向かって、全く知らない「’うたたね’さんの絵を描いて!」と言われたら、「うたたねさん?誰それ?」となり、描けませんよね。今回もそのようなことが起きています。
この場合、2行目の「hensuu」が間違っており、正しくは1行目と同じ「hensu」です。
このように構文ミスによる変数名の間違いがあると、エラーが起こります。
変数名や関数名が間違っている場合の対処法
原因は「変数名が間違っている」ということなので、変数名を正しくすることで解決するのですが、
最初のうちはエラーが出ただけで焦ってしまいますよね。
前項の「まずやるべきこと」でも書きましたが、このエラーが出た場合、
ひとまず「xxx」を構文内で検索してみましょう。
xxxが変数の場合、検索結果が「1件」だったら構文ミス確定です。
変数なら必ず2件以上ヒットします。
検索結果が複数ある場合でも、ヒットした部分より前に、似たような変数が使われていないか確認して修正しましょう。
前項の例では、「hensuu」を「hensu」に修正すると、「hensu」に入れた「1」が表示され、
正常終了します。
hensu = 1
print(hensuu)
↓
hensu = 1
print(hensu)
実行結果:1
次に、2つ目の原因です。
「del」を使っている
2つ目は、【「del」を使っている】です。
「del」は変数や関数を削除する時に使われます。
「del」で変数や関数を「削除」するため、その変数や関数は消えて未定義の状態(作成される前の状態)に戻ります。
delについては下記記事にて詳しく解説しておりますので、気になる方はご覧ください。
では、delを使った場合の見本です。
下記のコードを見てください。
hensu = 1
del hensu
print(hensu)
実行結果:Name error: name ‘hensu’ is not defined
起きている状況を説明いたします。
- 変数を作成する
- delで変数を削除する → 変数が消える
- 消えた変数を表示しようとする → 変数が消えているためエラーとなる
というわけです。
「del」を使っている場合の対処法
「del」を使っている場合の対処法は2つです。
- 「del」を使うのをやめる
- 変数や関数を新しい名前で作成し直す
1つずつ見ていきましょう。
「del」を使うのをやめる
1つ目の対処法は「delを使うのをやめる」です。
「del」が原因のため、「del」をやめれば問題は解決します。
しかしながら、「del」を使って変数や関数を削除したのには何らかの理由があります。
例えば、「メモリエラーを改善するため」や「誤作動防止のため」などです。
「del」を使うのをやめることによって、逆にこれらの問題が再発する可能性がありますので、自己責任で行ってください。
変数や関数を新しい名前で作成し直す
2つ目は、「変数や関数を新しい名前で作成し直す」です。
delで削除した変数や関数は使わず、新しく作り直しましょう。
新しい名前で作成したら、下記を再検索しましょう。
「Name error: name xxx is not defined」の「xxx」を再検索
検索で出てきた「xxx」のエラー箇所から下を全て新しい名前に書き換えましょう。
hensu = 1
del hensu
print(hensu)
a = hensu
↓
hensu = 1
del hensu
hensuuuu = 1
print(hensuuuu)
a = hensuuuu
その他の原因
その他にも以下のような原因があります。確認してみてください。
- importが抜けている
- 関数の頭文字を小文字で書いてしまっている
最後に
「Name error: name xxx is not defined」エラーの原因と対処法を解説いたしました。
ひとまずこのエラーが出た場合は、「xxx」を構文内で検索してみてください。
このブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、ぜひ他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!