NameError:名称“X”未在 Python 中定义

NameError:名称“X”未在 Python 中定义

NameError: name ‘X’ is not defined in Python

Python“NameError: name is not defined”发生在我们试图访问一个未定义或定义之前的变量或函数时。要解决该错误,请确保您没有拼错变量名并在声明后访问它。

nameerror 名称未定义

下面是错误如何发生的示例。

主程序
employee = { 'name': 'Alice', 'age': 30, } # ⛔️ NameError: name 'Employee' is not defined. Did you mean: 'employee'? print(Employee) # 👈️ misspelled variable's name

问题是我们拼错了变量名。请注意,变量、函数和类的名称区分大小写。

要解决这种情况下的错误,我们必须正确拼写变量名。

主程序
employee = { 'name': 'Alice', 'age': 30, } print(employee)

出现 Python“NameError: name is not defined”的原因有多种:

  1. 访问不存在的变量。
  2. 在声明之前访问变量、函数或类。
  3. 变量、函数或类的名称拼写错误(名称区分大小写)。
  4. 不要将字符串用引号引起来,例如print(hello).
  5. 不将字典的键用引号引起来。
  6. 使用内置模块而不先导入它们。
  7. 从外部访问作用域变量。例如,在函数中声明一个变量并试图从外部访问它。

您需要确保的第一件事是您没有访问不存在或尚未定义的变量。

主程序
# ⛔️ NameError: name 'do_math' is not defined print(do_math(15, 15)) def do_math(a, b): return a + b

上面示例中的问题是我们试图在do_math
函数声明之前调用它。

为了解决这个错误,我们必须在声明变量之后移动调用函数或访问变量的行。

主程序
def do_math(a, b): return a + b print(do_math(15, 15)) # 👉️ 30
请注意,您还必须在类声明后实例化类或调用类方法。

错误的另一个原因是忘记将字符串用单引号或双引号引起来。

主程序
def greet(name): return 'Hello ' + name # ⛔️ NameError: name 'Alice' is not defined. Did you mean: 'slice'? greet(Alice) # 👈️ forgot to wrap string in quotes

greet函数期望使用字符串调用,但我们忘记将字符串用引号引起来,因此发生了名称“X”未定义的错误。

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

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

主程序
def greet(name): return 'Hello ' + name greet('Alice')

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

主程序
employee = { 'name': 'Alice', # ⛔️ NameError: name 'age' is not defined age: 30 # 👈️ dictionary key not wrapped in quotes }

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

主程序
employee = { 'name': 'Alice', 'age': 30 }

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

主程序
# ⛔️ NameError: name 'math' is not defined print(math.floor(15.5))
我们使用math模块时没有先导入它,所以 Python 不知道math指的是什么。

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

主程序
import math print(math.floor(15.5)) # 👉️ 15

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

主程序
def get_message(): message = 'hello world' # 👈️ variable declared in function return message get_message() # ⛔️ NameError: name 'message' is not defined print(message)

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

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

主程序
# 👇️ declare variable in outer scope message = 'hello world' def get_message(): return message get_message() print(message) # 👉️ "hello world"

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

主程序
def get_message(): message = 'hello world' return message result = get_message() print(result) # 👉️ "hello world"

另一种选择是将变量标记为global.

主程序
def get_message(): # 👇️ mark message as global global message # 👇️ change its value message = 'hello world' return message get_message() print(message) # 👉️ "hello world"
请注意,global通常应避免使用关键字,因为它会使我们的代码更难阅读和推理。

如果您尝试从外部函数访问在嵌套函数中声明的变量,您可以将该变量标记为nonlocal.

主程序
def outer(): def inner(): message = 'hello world' print(message) inner() # ⛔️ NameError: name 'message' is not defined print(message) outer()

inner函数声明了一个名为的变量message,但我们尝试从该outer函数访问该变量并得到“名称message未定义”错误。

为了解决这个问题,我们可以将message变量标记为nonlocal.

主程序
def outer(): # 👇️ initialize message variable message = '' def inner(): # 👇️ Mark message as nonlocal nonlocal message message = 'hello world' print(message) inner() print(message) # 👉️ "hello world" outer()

关键字允许我们使用nonlocal封闭函数的局部变量。

请注意,我们必须在函数中初始化message变量,但我们能够在函数中更改它的值。 outer inner

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

主程序
def outer(): # 👇️ initialize message variable message = '' def inner(): # 👇️ declares message in inner's scope message = 'hello world' print(message) inner() print(message) # 👉️ "" outer()

结论

Python“NameError: name is not defined”发生在我们试图访问一个未定义或定义之前的变量或函数时。要解决该错误,请确保您没有拼错变量名并在声明后访问它。