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.
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) # ????️ 拼写错误的变量名
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)
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
# ⛔️ NameError: name 'do_math' is not defined print(do_math(15, 15)) def do_math(a, b): return a + b
Das Codebeispiel verursacht den Fehler „NameError: Funktion ist nicht definiert“, weil wir versuchen, die Funktion aufzurufen, bevor sie deklariert wird.
# ✅ 1) 声明函数或变量 def do_math(a, b): return a + b # ✅ 2) 之后访问它 print(do_math(15, 15)) # ????️ 30
Das Gleiche gilt für die Verwendung von Variablen.
# ⛔️ NameError: name 'variable' is not defined. print(variable) variable = 'jiyik.com'
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
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) # ????️ 忘记用引号括起字符串
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 Funktionprint()
ü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')
NameError: Name ist nicht definiert“.
print()
函数而不用引号将字符串引起来时,也会发生这种情况。
要解决该错误,请将字符串括在引号中。
# ⛔️ NameError: name 'math' is not defined print(math.floor(15.5))
如果我们使用内置模块而不导入它,也会导致“NameError: name is not defined”。
import math print(math.floor(15.5)) # ????️ 15
我们使用 math 模块而不先导入它,所以 Python 不知道 math 指的是什么。
“NameError: name ‘math’ is not defined”意味着我们正在尝试访问 math 模块上的函数或属性,但在访问该属性之前我们还没有导入模块。
要解决该错误,请确保导入我们正在使用的所有模块。
employee = { 'name': 'Jiyik', # ⛔️ NameError: name 'age' is not defined age: 30 # ????️ 字典键未包含在引号中 }
import math
行是必需的,因为它将 math 模块加载到我们的代码中。
模块只是函数和类的集合。
我们必须先加载模块,然后才能访问其成员。
如果我们有一本字典而忘记将其键用引号括起来,也会导致该错误。
employee = { 'name': 'Jiyik', 'age': 30 }
除非字典中有数字键,否则请确保将它们用单引号或双引号引起来。
def get_message(): message = 'jiyik.com' # ????️ 函数中声明的变量 return message get_message() # ⛔️ NameError: name 'message' is not defined print(message)
如果我们尝试从外部访问范围变量,也会发生该错误。
# ????️ 在外部范围内声明变量 message = 'hello world' def get_message(): return message get_message() print(message) # ????️ "hello world"
message 变量是在 get_message
函数中声明的,因此无法从外部范围访问它。
如果必须从外部访问变量,最好的解决方法是在外部作用域中声明该变量。
def get_message(): message = 'jiyik.com' return message result = get_message() print(result) # ????️ "hello world"
在这种情况下,另一种方法是从函数返回值并将其存储在变量中。
def get_message(): # ????️ 将 message 标记为全局 global message # ????️ change its value message = 'hello world' return message get_message() print(message) # ????️ "hello world"
另一种选择是将变量标记为全局变量。
def outer(): def inner(): message = 'jiyik.com' print(message) inner() # ⛔️ NameError: name 'message' is not defined print(message) outer()
请注意
,通常应避免使用global
关键字,因为它会使我们的代码更难阅读和推理。
如果我们尝试从外部函数访问在嵌套函数中声明的变量,我们可以将该变量标记为非局部变量。
def outer(): # ????️ 初始化 message 变量 message = '' def inner(): # ????️ 将 message 标记为 nonlocal nonlocal message message = 'jiyik.com' print(message) inner() print(message) # ????️ "jiyik.com" outer()
内部函数声明了一个名为 message 的变量,但我们尝试从外部函数访问该变量并得到“name message is not defined”错误。
为了解决这个问题,我们可以将消息变量标记为非局部变量。
def outer(): # ????️ 初始化 message 变量 message = '' def inner(): # ????️ 在内部范围内声明 message message = 'hello world' print(message) inner() print(message) # ????️ "" outer()
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
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
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))
# ✅ 将 import 语句移动到文件顶部 import math try: result = math.floor(15.5) except ImportError: math.floor(18.5) print(math.floor(20.5))
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()
当我们在定义类之前访问类时,也会发生该错误。
# ⛔️ 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: # ????️ 此处的代码可能会引发错误 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))
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!