Heim > Backend-Entwicklung > Python-Tutorial > So beheben Sie den Python-Fehler NameError:name 'X' ist nicht definiert

So beheben Sie den Python-Fehler NameError:name 'X' ist nicht definiert

王林
Freigeben: 2023-04-28 12:22:15
nach vorne
1730 Leute haben es durchsucht

Python „NameError: Name ist nicht definiert“ tritt auf, wenn wir versuchen, auf eine undefinierte Variable oder Funktion zuzugreifen, oder bevor diese definiert ist.

Um diesen Fehler zu beheben, müssen wir sicherstellen, dass wir den Variablennamen nicht falsch geschrieben haben, und nach der Deklaration darauf zugreifen.

Stellen Sie sicher, dass Sie keine Variable oder Funktion falsch geschrieben haben.

Unten finden Sie den Beispielcode, der den oben genannten Fehler erzeugt.

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

# ⛔️ NameError: name 'Employee' is not defined. Did you mean: 'employee'?
print(Employee) # ????️ 拼写错误的变量名
Nach dem Login kopieren

So beheben Sie den Python-Fehler NameError:name X ist nicht definiert

Das Problem ist, dass wir den Variablennamen falsch geschrieben haben. Beachten Sie, dass bei Variablen-, Funktions- und Klassennamen die Groß-/Kleinschreibung beachtet werden muss.

Um den Fehler in diesem Fall zu beheben, müssen wir den Variablennamen richtig buchstabieren.

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

print(employee)
Nach dem Login kopieren

Greifen Sie auf eine Variable, Funktion oder Klasse zu, bevor Sie sie deklarieren.

  • Der Name einer Variablen, Funktion oder Klasse ist falsch geschrieben (bei Namen muss die Groß-/Kleinschreibung beachtet werden).

  • Schließen Sie Zeichenfolgen nicht in Anführungszeichen, wie z. B. print(hello).

  • Setzen Sie Wörterbuchschlüssel nicht in Anführungszeichen.

  • Verwenden Sie integrierte Module, ohne sie vorher zu importieren.

  • Greifen Sie von außen auf Bereichsvariablen zu. Deklarieren Sie beispielsweise eine Variable in einer Funktion und versuchen Sie, von außen darauf zuzugreifen.

  • Zugriff auf nicht vorhandene Variablen oder Funktionen #

  • Stellen Sie sicher, dass wir nicht auf Variablen zugreifen, die nicht existieren oder noch nicht definiert wurden.

  • Zugriff auf nicht vorhandene Variablen oder Funktionen

  • Stellen Sie sicher, dass wir nicht auf Variablen zugreifen, die nicht existieren oder noch nicht definiert wurden.
  • # ⛔️ NameError: name 'do_math' is not defined
    print(do_math(15, 15))
    
    
    def do_math(a, b):
        return a + b
    Nach dem Login kopieren

    Das Codebeispiel verursacht den Fehler „NameError: Funktion ist nicht definiert“, weil wir versuchen, die Funktion aufzurufen, bevor sie deklariert wird.

  • Um diesen Fehler zu beheben, verschieben Sie die Zeile, die die Funktion aufruft oder auf die Variable zugreift, nachdem Sie sie deklariert haben.
# ✅ 1) 声明函数或变量
def do_math(a, b):
    return a + b

# ✅ 2) 之后访问它
print(do_math(15, 15))  # ????️ 30
Nach dem Login kopieren

Bitte beachten Sie, dass wir nach der Klassendeklaration auch die Klasse instanziieren oder eine Klassenmethode aufrufen müssen.

Das Gleiche gilt für die Verwendung von Variablen.

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

variable = 'jiyik.com'
Nach dem Login kopieren

Stellen Sie sicher, dass Sie die Zeile, die auf die Variable zugreift, unter die Zeile verschieben, in der sie deklariert wird.

variable = 'jiyik.com'

print(variable)  # ????️ jiyik.com
Nach dem Login kopieren

Vergessen, eine Zeichenfolge in einfache oder doppelte Anführungszeichen zu setzen

Eine weitere Fehlerursache ist das Vergessen, eine Zeichenfolge in einfache oder doppelte Anführungszeichen zu setzen.

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


# ⛔️ NameError: name 'Fql' is not defined. Did you mean: 'slice'?
greet(Fql) # ????️ 忘记用引号括起字符串
Nach dem Login kopieren

greet-Funktion sollte voraussichtlich mit einer Zeichenfolge aufgerufen werden, aber wir haben vergessen, die Zeichenfolge in Anführungszeichen zu setzen, sodass ein Fehler aufgetreten ist, bei dem der Name „X“ undefiniert war.

Dies passiert auch, wenn eine Zeichenfolge an die Funktion print() übergeben wird, ohne die Zeichenfolge in Anführungszeichen zu setzen.

Um diesen Fehler zu beheben, schließen Sie die Zeichenfolge in Anführungszeichen ein.

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

greet('Fql')
Nach dem Login kopieren
Ein integriertes Modul verwenden, ohne es zu importieren

Wenn wir ein integriertes Modul verwenden, ohne es zu importieren, führt dies auch zu „
NameError: Name ist nicht definiert

“. print() 函数而不用引号将字符串引起来时,也会发生这种情况。

要解决该错误,请将字符串括在引号中。

# ⛔️ NameError: name 'math' is not defined
print(math.floor(15.5))
Nach dem Login kopieren

使用内置模块而不导入它

如果我们使用内置模块而不导入它,也会导致“NameError: name is not defined”。

import math
print(math.floor(15.5))  # ????️ 15
Nach dem Login kopieren

我们使用 math 模块而不先导入它,所以 Python 不知道 math 指的是什么。

“NameError: name ‘math’ is not defined”意味着我们正在尝试访问 math 模块上的函数或属性,但在访问该属性之前我们还没有导入模块。

要解决该错误,请确保导入我们正在使用的所有模块。

employee = {
    'name': 'Jiyik',
    # ⛔️ NameError: name 'age' is not defined
    age: 30 # ????️ 字典键未包含在引号中
}
Nach dem Login kopieren

import math 行是必需的,因为它将 math 模块加载到我们的代码中。

模块只是函数和类的集合。

我们必须先加载模块,然后才能访问其成员。

忘记用引号将字典的键括起来

如果我们有一本字典而忘记将其键用引号括起来,也会导致该错误。

employee = {
    'name': 'Jiyik',
    'age': 30
}
Nach dem Login kopieren

除非字典中有数字键,否则请确保将它们用单引号或双引号引起来。

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


get_message()

# ⛔️ NameError: name 'message' is not defined
print(message)
Nach dem Login kopieren

尝试从外部访问作用域变量

如果我们尝试从外部访问范围变量,也会发生该错误。

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

def get_message():
    return message


get_message()

print(message)  # ????️ "hello world"
Nach dem Login kopieren

message 变量是在 get_message 函数中声明的,因此无法从外部范围访问它。

如果必须从外部访问变量,最好的解决方法是在外部作用域中声明该变量。

def get_message():
    message = 'jiyik.com'
    return message


result = get_message()

print(result)  # ????️ "hello world"
Nach dem Login kopieren

在这种情况下,另一种方法是从函数返回值并将其存储在变量中。

def get_message():
    # ????️ 将 message 标记为全局
    global message

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

    return message


get_message()

print(message)  # ????️ "hello world"
Nach dem Login kopieren

另一种选择是将变量标记为全局变量。

def outer():
    def inner():
        message = 'jiyik.com'
        print(message)

    inner()

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


outer()
Nach dem Login kopieren

请注意 ,通常应避免使用 global 关键字,因为它会使我们的代码更难阅读和推理。

试图访问在嵌套函数中声明的变量

如果我们尝试从外部函数访问在嵌套函数中声明的变量,我们可以将该变量标记为非局部变量。

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

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

    inner()

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


outer()
Nach dem Login kopieren

内部函数声明了一个名为 message 的变量,但我们尝试从外部函数访问该变量并得到“name message is not defined”错误。

为了解决这个问题,我们可以将消息变量标记为非局部变量。

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

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

    inner()

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

outer()
Nach dem Login kopieren
Nach dem Login kopieren

nonlocal

# ⛔️ 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
Nach dem Login kopieren
Nach dem Login kopieren
🎜Wir verwenden das Mathematikmodul, ohne es vorher zu importieren, sodass Python nicht weiß, worauf sich Mathematik bezieht. 🎜🎜 „NameError: Name ‘math’ ist nicht definiert“ bedeutet, dass wir versuchen, auf eine Funktion oder Eigenschaft im Mathematikmodul zuzugreifen, das Modul jedoch nicht importiert haben, bevor wir auf die Eigenschaft zugegriffen haben. 🎜🎜Um diesen Fehler zu beheben, stellen Sie sicher, dass Sie alle von uns verwendeten Module importieren. Die Zeile 🎜
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
Nach dem Login kopieren
Nach dem Login kopieren
🎜import math ist erforderlich, da sie das Modul 🎜math🎜 in unseren Code lädt. 🎜🎜Ein Modul ist nur eine Sammlung von Funktionen und Klassen. 🎜🎜Wir müssen das Modul laden, bevor wir auf seine Mitglieder zugreifen können. 🎜🎜Ich habe vergessen, die Schlüssel des Wörterbuchs in Anführungszeichen zu setzen. 🎜🎜 Dieser Fehler kann auch auftreten, wenn wir ein Wörterbuch haben und vergessen, seine Schlüssel in Anführungszeichen zu setzen. 🎜
try:
    # ????️ 此处的代码可能会引发错误

    import math
    result = math.floor(15.5)

except ImportError:
    math.floor(18.5)

print(math.floor(20.5))
Nach dem Login kopieren
Nach dem Login kopieren
🎜 Sofern Sie keine Zifferntasten im Wörterbuch haben, stellen Sie sicher, dass Sie diese in einfache oder doppelte Anführungszeichen setzen. 🎜
# ✅ 将 import 语句移动到文件顶部
import math

try:
    result = math.floor(15.5)

except ImportError:
    math.floor(18.5)

print(math.floor(20.5))
Nach dem Login kopieren
Nach dem Login kopieren
🎜 Versuch, von außen auf die Bereichsvariable zuzugreifen 🎜🎜 Dieser Fehler tritt auch auf, wenn wir versuchen, von außen auf die Bereichsvariable zuzugreifen. Die Variable 🎜rrreee🎜🎜message🎜 ist in der Funktion get_message deklariert, sodass von außerhalb des Gültigkeitsbereichs nicht auf sie zugegriffen werden kann. 🎜🎜Wenn auf eine Variable von außen zugegriffen werden muss, besteht die beste Lösung darin, die Variable im äußeren Bereich zu deklarieren. 🎜rrreee🎜Eine Alternative besteht in diesem Fall darin, den Wert von der Funktion zurückzugeben und ihn in einer Variablen zu speichern. 🎜rrreee🎜Eine andere Möglichkeit besteht darin, die Variable als global zu markieren. 🎜rrreee🎜🎜🎜Bitte beachten Sie🎜, dass das Schlüsselwort global generell vermieden werden sollte, da es das Lesen und Nachdenken über unseren Code erschwert. 🎜🎜Versuch, auf eine in einer verschachtelten Funktion deklarierte Variable zuzugreifen. 🎜🎜Wenn wir versuchen, von einer äußeren Funktion aus auf eine in einer verschachtelten Funktion deklarierte Variable zuzugreifen, können wir die Variable als nicht lokal markieren. 🎜rrreee🎜Die innere Funktion deklariert eine Variable mit dem Namen 🎜message🎜, aber wir versuchen, über die äußere Funktion auf die Variable zuzugreifen und erhalten die Fehlermeldung „Name Nachricht ist nicht definiert“. 🎜🎜Um dieses Problem zu lösen, können wir die Nachrichtenvariablen als nicht lokale Variablen markieren. Mit dem Schlüsselwort 🎜rrreee🎜nonlocal können wir lokale Variablen der einschließenden Funktion verwenden. 🎜

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

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

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

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

    inner()

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

outer()
Nach dem Login kopieren
Nach dem Login kopieren

在类定义之前访问它

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

# ⛔️ 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
Nach dem Login kopieren
Nach dem Login kopieren

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

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
Nach dem Login kopieren
Nach dem Login kopieren

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

请注意在 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))
Nach dem Login kopieren
Nach dem Login kopieren

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

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

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

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

try:
    result = math.floor(15.5)

except ImportError:
    math.floor(18.5)

print(math.floor(20.5))
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo beheben Sie den Python-Fehler NameError:name 'X' ist nicht definiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage