在 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
异常。此方法不能解决我们的问题或消除异常。
这种方法的一个优点是我们的代码永远不会停止它的执行。
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