在 Python 中处理 NameError 异常

Muhammad Maisam Abbas 2023年1月30日
  1. Python 中的 NameError 异常
  2. 在 Python 中处理 NameError 异常
在 Python 中处理 NameError 异常

本教程将讨论 NameError 异常是如何发生的以及如何在 Python 中处理它。

Python 中的 NameError 异常

当调用的对象未在当前范围内初始化时,会引发 Python 中的 NameError 异常。它可能已定义,但我们没有使用正确的名称来调用它。

这个例外有四个不同的原因,下面将详细讨论。

拼写错误的内置函数或关键字

在使用内置函数或关键字时,我们经常拼写错误,或者 IDE 有时会忘记更正我们。在这种情况下会引发 NameError 异常。要处理此异常,我们必须指定正确的函数名称或正在使用的关键字。

下面的代码片段演示了一个内置函数在调用时拼写错误的场景,这会引发 NameError 异常。

prnt("Hello World")

输出:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-bcdc0d5019dd> in <module>()
----> 1 prnt("Hello World")

NameError: name 'prnt' is not defined

我们拼错了内置的 print() 函数以引发 NameError 异常。修复此异常的唯一方法是查找 Python 的官方文档以获取正确的函数定义。

使用了未定义的变量或函数

这是引发 NameError 异常的另一个常见原因。我们倾向于调用不存在的函数或变量。

此代码片段演示了一个内置函数在调用时拼写错误的场景,这会引发 NameError 异常。

print(value)

输出:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-a458d288e6eb> in <module>()
----> 1 print(value)

NameError: name 'value' is not defined

我们调用未定义的 value 属性来引发 NameError 异常。修复此异常的唯一方法是从代码中删除函数或变量调用。

在全局范围内调用局部变量或函数

我们有时会在其范围之外调用局部函数和变量,从而导致 NameError 异常。

以下代码演示了在全局范围内调用局部变量的场景,这会引发 NameError 异常。

def func():
    value = 6500


print(value)

输出:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-9e4aa38076bc> in <module>()
      1 def func():
      2     value = 6500
----> 3 print(value)

NameError: name 'value' is not defined

局部变量 value 位于 func() 函数内,但我们在全局范围内调用它,这会引发 NameError 异常。我们可以通过了解可以在何处使用每个变量和函数来引用来修复此异常。

声明前调用变量或函数

当我们在声明之前调用变量或函数时,这种类型的错误经常发生。Python 是一种解释型语言,它按顺序逐行执行。

以下代码演示了声明前的变量调用,引发了 NameError 异常。

print(value)
value = 1500

输出:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-49e5676ec0d7> in <module>()
----> 1 print(value)
      2 value = 1500

NameError: name 'value' is not defined

在声明它之前,我们调用了 value 变量来引发 NameError 异常。我们可以通过在初始化之后编写调用语句来修复这个异常。

在 Python 中处理 NameError 异常

如果我们想处理 NameError 异常以便我们的代码永远不会停止执行,我们可以将我们的代码包含在 try/except 块中。我们可以使用 NameError 异常类来处理这种异常类型。

示例代码片段演示了如何在不使用 Python 的 try/except 块停止执行的情况下处理 NameError 异常。

try:
    print(v)
    v = 1500
except NameError:
    print("Nameerror exception raised")

输出:

Nameerror exception raised

我们通过将容易出错的代码包含在 try 块中并使用 except 块在输出中写入错误消息来处理 NameError 异常。此方法不能解决我们的问题或消除异常。

这种方法的一个优点是我们的代码永远不会停止它的执行。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相关文章 - Python Exception