Python "NameError: 이름이 정의되지 않았습니다"는 정의되지 않은 변수나 함수에 액세스하려고 할 때 또는 정의되기 전에 발생합니다.
이 오류를 해결하려면 변수 이름을 잘못 입력하지 않았는지 확인하고 변수 선언 후 액세스해야 합니다.
아래는 위 오류를 발생시키는 샘플 코드입니다.
employee = { 'name': 'Jiyik', 'age': 30, } # ⛔️ NameError: name 'Employee' is not defined. Did you mean: 'employee'? print(Employee) # ????️ 拼写错误的变量名
문제는 변수 이름의 철자를 잘못 입력했다는 것입니다. 변수, 함수 및 클래스 이름은 대소문자를 구분합니다.
이 경우 오류를 수정하려면 변수 이름을 올바르게 입력해야 합니다.
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
문자열을 작은따옴표나 큰따옴표로 묶는 것을 잊었습니다.
오류의 또 다른 원인은 문자열을 작은따옴표나 큰따옴표로 묶는 것을 잊어버린 것입니다.
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: 이름이 정의되지 않았습니다"가 발생합니다.
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🎜우리는 수학 모듈을 먼저 가져오지 않고 사용하기 때문에 Python은 수학이 무엇을 의미하는지 알 수 없습니다. 🎜🎜 "NameError: 이름 ‘math’이 정의되지 않았습니다."는 수학 모듈의 함수나 속성에 액세스하려고 하지만 속성에 액세스하기 전에 모듈을 가져오지 않았음을 의미합니다. 🎜🎜이 오류를 해결하려면 사용 중인 모든 모듈을 가져와야 합니다. 🎜
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
줄은 🎜math🎜 모듈을 코드에 로드하기 때문에 필요합니다. 🎜🎜모듈은 함수와 클래스의 집합일 뿐입니다. 🎜🎜멤버에 액세스하려면 먼저 모듈을 로드해야 합니다. 🎜🎜사전의 키를 따옴표로 묶는 것을 잊었습니다. 🎜🎜 이 오류는 사전이 있고 해당 키를 따옴표로 묶는 것을 잊어버린 경우에도 발생할 수 있습니다. 🎜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))🎜 외부에서 범위 변수에 접근하려고 합니다. 🎜🎜 이 오류는 외부에서 범위 변수에 접근하려고 할 때도 발생합니다. 🎜rrreee🎜🎜message🎜 변수는
get_message
함수에 선언되어 있으므로 외부 범위에서는 접근할 수 없습니다. 🎜🎜변수에 외부에서 액세스해야 하는 경우 가장 좋은 해결 방법은 외부 범위에서 변수를 선언하는 것입니다. 🎜rrreee🎜이 경우 대안은 함수에서 값을 반환하고 이를 변수에 저장하는 것입니다. 🎜rrreee🎜또 다른 옵션은 변수를 전역으로 표시하는 것입니다. 🎜rrreee🎜🎜🎜참고
🎜 global
키워드는 일반적으로 코드를 읽고 추론하기 어렵게 만들기 때문에 피해야 합니다. 🎜🎜중첩 함수에 선언된 변수에 액세스하려고 합니다. 🎜🎜외부 함수에서 중첩 함수에 선언된 변수에 액세스하려고 하면 해당 변수를 로컬이 아닌 것으로 표시할 수 있습니다. 🎜rrreee🎜내부 함수는 🎜message🎜라는 변수를 선언하지만 외부 함수에서 변수에 액세스하려고 하면 "이름 메시지가 정의되지 않았습니다" 오류가 발생합니다. 🎜🎜이 문제를 해결하기 위해 메시지 변수를 비지역 변수로 표시할 수 있습니다. 🎜rrreee🎜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: # ????️ 此处的代码可能会引发错误 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를 해결하는 방법:이름 'X'가 정의되지 않았습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!