>백엔드 개발 >파이썬 튜토리얼 >Python 오류 NameError를 해결하는 방법:이름 'X'가 정의되지 않았습니다.

Python 오류 NameError를 해결하는 방법:이름 'X'가 정의되지 않았습니다.

王林
王林앞으로
2023-04-28 12:22:151766검색

Python "NameError: 이름이 정의되지 않았습니다"는 정의되지 않은 변수나 함수에 액세스하려고 할 때 또는 정의되기 전에 발생합니다.

이 오류를 해결하려면 변수 이름을 잘못 입력하지 않았는지 확인하고 변수 선언 후 액세스해야 합니다.

변수나 함수의 철자가 틀리지 않았는지 확인하세요.

아래는 위 오류를 발생시키는 샘플 코드입니다.

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

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

Python 오류 NameError를 해결하는 방법:이름 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

문자열을 작은따옴표나 큰따옴표로 묶는 것을 잊었습니다.

오류의 또 다른 원인은 문자열을 작은따옴표나 큰따옴표로 묶는 것을 잊어버린 것입니다.

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/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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제