ホームページ > バックエンド開発 > Python チュートリアル > Python エラー NameError:name 'X' が定義されていないを解決する方法

Python エラー NameError:name 'X' が定義されていないを解決する方法

王林
リリース: 2023-04-28 12:22:15
転載
1730 人が閲覧しました

Python 「NameError: 名前が定義されていません 」は、未定義の変数や関数にアクセスしようとしたとき、または定義される前に発生します。

このエラーを修正するには、変数名のスペルを間違えていないことを確認し、宣言後にアクセスする必要があります。

変数または関数のスペルを間違えないように注意してください。

以下は、上記のエラーを生成するサンプル コードです。

employee = {
    'name': 'Jiyik',
    'age': 30,
}

# ⛔️ NameError: name 'Employee' is not defined. Did you mean: 'employee'?
print(Employee) # ????️ 拼写错误的变量名
ログイン後にコピー

Python エラー NameError:name X が定義されていないを解決する方法

#問題は、変数名のスペルを間違えたことです。変数、関数、クラス名では大文字と小文字が区別されることに注意してください。

この場合のエラーを解決するには、変数名のスペルを正しく入力する必要があります。

employee = {
    'name': 'Jiyik',
    'age': 30,
}

print(employee)
ログイン後にコピー

## 存在しない変数にアクセスします。

    変数、関数、またはクラスは、宣言する前にアクセスしてください。
  • 変数、関数、またはクラスの名前のスペルが間違っています (名前は大文字と小文字が区別されます)。
  • print(hello) のように、文字列を引用符で囲まないでください。
  • 辞書キーを引用符で囲まないでください。
  • 組み込みモジュールは、最初にインポートせずに使用します。
  • 外部からスコープ変数にアクセスします。たとえば、関数内で変数を宣言し、外部からその変数にアクセスしてみます。
  • 存在しない変数または関数へのアクセス
  • #存在しない変数またはまだ定義されていない変数にアクセスしていないことを確認してください。
  • 存在しない変数または関数へのアクセス
  • 存在しない変数またはまだ定義されていない変数にアクセスしていないことを確認してください。

    # ⛔️ NameError: name 'do_math' is not defined
    print(do_math(15, 15))
    
    
    def do_math(a, b):
        return a + b
    ログイン後にコピー
  • コード例では、関数が宣言される前に関数を呼び出そうとしているため、「NameError: 関数が定義されていません」エラーが発生します。

このエラーを解決するには、関数を呼び出す行、または宣言後に変数にアクセスする行を移動します。

# ✅ 1) 声明函数或变量
def do_math(a, b):
    return a + b

# ✅ 2) 之后访问它
print(do_math(15, 15))  # ????️ 30
ログイン後にコピー

クラス宣言の後に、クラスをインスタンス化するか、クラス メソッドを呼び出す必要があることに注意してください。

変数を使用する場合も同様です。

# ⛔️ NameError: name 'variable' is not defined.
print(variable)

variable = 'jiyik.com'
ログイン後にコピー

変数にアクセスする行を、変数を宣言する行の下に移動してください。

variable = 'jiyik.com'

print(variable)  # ????️ jiyik.com
ログイン後にコピー

文字列を一重引用符または二重引用符で囲むのを忘れる

エラーのもう 1 つの原因は、文字列を一重引用符または二重引用符で囲むのを忘れることです。

def greet(name):
    return 'Hello ' + name


# ⛔️ NameError: name 'Fql' is not defined. Did you mean: 'slice'?
greet(Fql) # ????️ 忘记用引号括起字符串
ログイン後にコピー

greet 関数は文字列を使用して呼び出す必要がありましたが、文字列を引用符で囲むのを忘れたため、名前「X」が未定義であるというエラーが発生しました。

これは、文字列を引用符で囲まずに文字列を

print()

関数に渡す場合にも発生します。

このエラーを解決するには、文字列を引用符で囲みます。

def greet(name):
    return 'Hello ' + name

greet('Fql')
ログイン後にコピー
インポートせずに組み込みモジュールを使用する組み込みモジュールをインポートせずに使用すると、「
NameError: name is not generated##」が発生します。 #」。

# ⛔️ NameError: name 'math' is not defined
print(math.floor(15.5))
ログイン後にコピー

数学モジュールを最初にインポートせずに使用するため、Python は数学が何を指すのか知りません。

「NameError: name ‘math’ が定義されていません」は、math モジュールの関数またはプロパティにアクセスしようとしていますが、プロパティにアクセスする前にモジュールをインポートしていないことを意味します。

このエラーを解決するには、使用しているすべてのモジュールを必ずインポートしてください。
import math
print(math.floor(15.5))  # ????️ 15
ログイン後にコピー

import math
行は、

math

モジュールをコードにロードするため、必須です。

モジュールは、関数とクラスの単なるコレクションです。

モジュールのメンバーにアクセスするには、その前にモジュールをロードする必要があります。 辞書のキーを引用符で囲むのを忘れる

このエラーは、辞書があり、そのキーを引用符で囲むのを忘れた場合にも発生する可能性があります。

employee = {
    'name': 'Jiyik',
    # ⛔️ NameError: name 'age' is not defined
    age: 30 # ????️ 字典键未包含在引号中
}
ログイン後にコピー
辞書に数値キーがない場合は、数値キーを一重引用符または二重引用符で囲んでください。

employee = {
    'name': 'Jiyik',
    'age': 30
}
ログイン後にコピー
外部からスコープ変数にアクセスしようとしています

このエラーは、外部からスコープ変数にアクセスしようとした場合にも発生します。

def get_message():
    message = 'jiyik.com' # ????️ 函数中声明的变量
    return message


get_message()

# ⛔️ NameError: name 'message' is not defined
print(message)
ログイン後にコピー

message

この変数は

get_message

関数内で宣言されているため、外部スコープからはアクセスできません。

変数に外部からアクセスする必要がある場合、最善の解決策は、変数を外部スコープで宣言することです。

# ????️ 在外部范围内声明变量
message = 'hello world'

def get_message():
    return message


get_message()

print(message)  # ????️ "hello world"
ログイン後にコピー
この場合の代替方法は、関数から値を返し、それを変数に格納することです。
def get_message():
    message = 'jiyik.com'
    return message


result = get_message()

print(result)  # ????️ "hello world"
ログイン後にコピー
もう 1 つのオプションは、変数をグローバルとしてマークすることです。
def get_message():
    # ????️ 将 message 标记为全局
    global message

    # ????️ change its value
    message = 'hello world'

    return message


get_message()

print(message)  # ????️ "hello world"
ログイン後にコピー

に注意してください。通常、

global
キーワードはコードが読みにくくなり、推論が困難になるため、使用しないでください。 。

入れ子関数で宣言された変数にアクセスしようとしています 入れ子関数で宣言された変数に外部関数からアクセスしようとすると、その変数を非変数としてマークできます。ローカル変数。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def outer():     def inner():         message = 'jiyik.com'         print(message)     inner()     # ⛔️ NameError: name 'message' is not defined     print(message) outer()</pre><div class="contentsignin">ログイン後にコピー</div></div>内部関数は

message
という名前の変数を宣言していますが、外部関数から変数にアクセスしようとすると、「名前メッセージが定義されていません」というエラーが発生します。

この問題を解決するには、メッセージ変数を非ローカル変数としてマークします。

def outer():
    # ????️ 初始化 message 变量
    message = ''

    def inner():
        # ????️ 将 message 标记为 nonlocal
        nonlocal message
        message = 'jiyik.com'
        print(message)

    inner()

    print(message)  # ????️ "jiyik.com"


outer()
ログイン後にコピー

nonlocal キーワードを使用すると、囲んでいる関数のローカル変数を使用できます。

请注意 ,我们必须在外部函数中初始化消息变量,但我们能够在内部函数中更改它的值。

如果我们不使用 nonlocal 语句,对 print() 函数的调用将返回一个空字符串。

def outer():
    # ????️ 初始化 message 变量
    message = ''

    def inner():
        # ????️ 在内部范围内声明 message
        message = 'hello world'
        print(message)

    inner()

    print(message)  # ????️ ""

outer()
ログイン後にコピー

在类定义之前访问它

当我们在定义类之前访问类时,也会发生该错误。

# ⛔️ NameError: name 'Employee' is not defined
emp1 = Employee('jiyik', 100)


class Employee():
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def get_name(self):
        return self.name
ログイン後にコピー

要解决该错误,请将实例化行移至类声明下方。

class Employee():
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def get_name(self):
        return self.name


emp1 = Employee('jiyik', 100)
print(emp1.name)  # ????️ jiyik
ログイン後にコピー

如果我们正在使用来自第三方库的类,则必须先导入该类才能使用它。

请注意在 try/except 块中使用 import 语句

try/except 块中使用 import 语句时也可能发生该错误。

try:
    # ????️ 此处的代码可能会引发错误

    import math
    result = math.floor(15.5)

except ImportError:
    math.floor(18.5)

print(math.floor(20.5))
ログイン後にコピー

该代码示例有效,但是,如果 import 语句之前的某些代码引发错误,则该模块将不会被导入。

这是一个问题,因为我们正在 except 块中和 try/except 语句之外访问模块。

相反,将导入语句移至文件顶部。

# ✅ 将 import 语句移动到文件顶部
import math

try:
    result = math.floor(15.5)

except ImportError:
    math.floor(18.5)

print(math.floor(20.5))
ログイン後にコピー

以上がPython エラー NameError:name 'X' が定義されていないを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート