如何解决 Python 错误 NameError: name ‘X‘ is not defined

这篇具有很好参考价值的文章主要介绍了如何解决 Python 错误 NameError: name ‘X‘ is not defined。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python“NameError: name is not defined”发生在我们试图访问一个未定义的变量或函数时,或者在它被定义之前。

要解决该错误,需要确保我们没有拼错变量名并在声明后访问它。


确保你没有拼错变量或函数

下面是产生上述错误的示例代码。

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

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

nameerror:name is not defined,Python 实用技巧,编程,python,开发语言

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

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

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

print(employee)

‘X’ is not defined 错误的常见原因

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

  • 访问不存在的变量。
  • 在声明之前访问变量、函数或类。
  • 变量、函数或类的名称拼写错误(名称区分大小写)。
  • 不要将字符串用引号引起来,例如 print(hello)
  • 不将字典的键用引号引起来。
  • 使用内置模块而不先导入它们。
  • 从外部访问作用域变量。 例如,在函数中声明一个变量并试图从外部访问它。
  • 访问不存在的变量或函数#
  • 确保我们没有访问不存在或尚未定义的变量。

访问不存在的变量或函数

确保我们没有访问不存在或尚未定义的变量。

# ⛔️ NameError: name 'do_math' is not defined
print(do_math(15, 15))


def do_math(a, b):
    return a + b

代码示例导致“NameError: function is not defined”错误,因为我们试图在函数声明之前调用它。

要解决该错误,请在声明变量后移动调用函数或访问变量的行。

# ✅ 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: name is not defined”。

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

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

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

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

import math

print(math.floor(15.5))  # 👉️ 15

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

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

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


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

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

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

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

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

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

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

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


get_message()

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

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

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

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

def get_message():
    return message


get_message()

print(message)  # 👉️ "hello world"

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

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"

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


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

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

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

    inner()

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


outer()

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

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

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

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

    inner()

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


outer()

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: name is not defined”,请确保:文章来源地址https://www.toymoban.com/news/detail-788695.html

  • 我们没有访问不存在的变量。
  • 我们不会在声明变量、函数或类之前访问它。
  • 我们没有拼错变量、函数或类的名称(名称区分大小写)。
  • 我们没有忘记用引号括起一个字符串,例如 print(hello)
  • 我们没有忘记用引号将字典的键括起来。
  • 如果不先导入内置模块,就不会使用它们。
  • 我们不是从外部访问作用域变量。 例如,在函数中声明一个变量并试图从外部访问它。

到了这里,关于如何解决 Python 错误 NameError: name ‘X‘ is not defined的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】成功解决NameError: name ‘cv2‘ is not defined

    【Python】成功解决NameError: name ‘cv2’ is not defined 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、P

    2024年04月09日
    浏览(54)
  • 完美解决丨#在python中,如果引用的变量未定义,则会报告NameError: name ‘变量名‘ is not defined。

    NameError 在python中,如果引用的变量未定义,则会报告NameError: name \\\'变量名\\\' is not defined。 如下代码抛出了一个异常: !/usr/bin/env python - - coding:utf-8 - - print \\\'hello world\\\' print \\\'hello %s\\\' % name 报错信息如下: Traceback (most recent call last): File \\\"hello.py\\\", line 6, in module print \\\'hello %s\\\' % name NameE

    2023年04月22日
    浏览(48)
  • 【Python】报错:NameError: name ‘By‘ is not defined

    目录 一、报错情况 二、报错解读 三、报错解决

    2024年02月11日
    浏览(74)
  • python+selenium报错AttributeError: ‘WebDriver‘ NameError: name ‘By‘ is not defined

    python 3.10.1 selenium 4.4.3 旧版本导包:    新版本导包: 需要多导一个,否则By 是报错的 定位语句  

    2024年02月16日
    浏览(48)
  • 已解决(最新版selenium框架元素定位报错)NameError: name ‘By‘ is not defined

    已解决(最新版selenium框架元素定位报错)NameError: name ‘By‘ is not defined 一个粉丝群的小伙伴提出的问题,操作selenium定位元素的时候报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴

    2023年04月10日
    浏览(61)
  • NameError: name ‘Image‘ is not defined

    Pycharm 报错“NameError: name ’ Image’is not defined” ##今天在运行代码时,出现了如下错误: 根据搜索,查到可以在anaconda prompt直接安装: 或者直接在pycharm搜索 但是我的能搜索到pillow,搜索不到image。并且pip install image 报错: 注意!!!关掉VPN!!! 再安装!! ###有博主提供

    2023年04月08日
    浏览(52)
  • debug: NameError: name ‘_C‘ is not defined 本地运行 GroundingDINO 代码 debug 记录

    在本地跑 GroundingDINO 代码 (github) 首先down下来代码: git clone https://github.com/IDEA-Research/GroundingDINO.git 然后跟着 readme 走,先下载预训练参数放到 ./weight 文件夹: mkdir weights cd weights wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth 然后新开

    2024年02月17日
    浏览(46)
  • ModuleNotFoundError:如何解决 no module named Python 错误?

    当你在一个 Python 文件中导入一个模块时,Python 试图通过几种方式来处理这个模块。有时,Python 会在之后抛出 ModuleNotFoundError。这个错误在 Python 中是什么意思? 顾名思义,当你试图访问或使用一个找不到的模块时就会发生这个错误。以标题为例,找不到“名为 Python 的模块

    2024年01月21日
    浏览(64)
  • Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总

    这个错误通常发生在你试图访问一个类型为\\\'NoneType\\\'的对象的元素或者属性时。在Python中,\\\'NoneType\\\'是一种特殊类型,表示值的缺失或空值。 例如以下代码可能会引发这个错误: 在这个例子中,my_list 被赋值为 None,这意味着它没有任何元素。当你尝试使用 [0] 访问 my_list 的第一

    2024年02月02日
    浏览(56)
  • 如何申请百度地图开发者AK和基本使用,并解决Uncaught ReferenceError: BMapGL is not defined的错误

    今天在学习 amis 框架中的地理位置( LocationPicker )的组件,如下图所示: 关于 amis 的更多了解,可以参考博文:百度低代码amis框架的讲解 截图中注意的是, ak 参数只能在 amis 官网示例中使用,让我们前往百度地图开放平台申请自己的 ak 。 百度地图开放平台官网地址:https:

    2024年02月01日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包