Python 异常

异常是在程序执行期间发生的意外事件。例如,

divide_by_zero = 7 / 0

以上代码会引发一个异常,因为一个数字不能被 0 整除。

让我们来详细了解 Python 异常。


Python 逻辑错误(异常)

在运行时(通过语法测试后)发生的错误称为异常逻辑错误

例如,当我们出现以下情况时,会发生异常:

  • 尝试打开一个不存在的文件(用于读取)(FileNotFoundError)
  • 尝试用零除一个数 (ZeroDivisionError)
  • 尝试导入一个不存在的模块 (ImportError) 等等。

每当这些类型的运行时错误发生时,Python 都会创建一个异常对象。

如果处理不当,它会打印该错误的回溯信息,以及一些关于错误发生原因的详细信息。

让我们看看 Python 是如何处理这些错误的:

divide_numbers = 7 / 0
print(divide_numbers)

输出

Traceback (most recent call last):
 File "<string>", line 1, in <module>
ZeroDivisionError: division by zero

在这里,当尝试计算 7 / 0 时,程序抛出了一个系统异常 ZeroDivisionError


Python 内置异常

非法操作会引发异常。Python 中有许多内置异常,当相应的错误发生时会被引发。

我们可以使用内置的 local() 函数查看所有内置异常,如下所示:

print(dir(locals()['__builtins__']))

在这里,locals()['__builtins__'] 将返回一个包含内置异常、函数和属性的模块,而 dir 允许我们将这些属性作为字符串列出。

下面列出了一些 Python 编程中常见的内置异常以及导致它们的原因:

异常 错误原因
AssertionError assert 语句失败时引发。
AttributeError 当属性赋值或引用失败时引发。
EOFError input() 函数遇到文件结束符(EOF)条件时引发。
FloatingPointError 当浮点运算失败时引发。
GeneratorExit 当生成器的 close() 方法被调用时引发。
ImportError 当找不到要导入的模块时引发。
IndexError 当序列的索引超出范围时引发。
KeyError 当在字典中找不到键时引发。
KeyboardInterrupt 当用户按下中断键(Ctrl+CDelete)时引发。
MemoryError 当操作耗尽内存时引发。
NameError 当在本地或全局作用域中找不到变量时引发。
NotImplementedError 由抽象方法引发。
OSError 当系统操作导致系统相关错误时引发。
OverflowError 当算术运算的结果太大而无法表示时引发。
ReferenceError 当使用弱引用代理访问一个已被垃圾回收的对象时引发。
RuntimeError 当发生的错误不属于任何其他类别时引发。
StopIteration next() 函数引发,表示迭代器没有更多项可以返回。
SyntaxError 当解析器遇到语法错误时引发。
IndentationError 当缩进不正确时引发。
TabError 当缩进包含不一致的制表符和空格时引发。
SystemError 当解释器检测到内部错误时引发。
SystemExit sys.exit() 函数引发。
TypeError 当对类型不正确的对象应用函数或操作时引发。
UnboundLocalError 当引用函数或方法中的局部变量,但没有为该变量绑定值时引发。
UnicodeError 当发生与 Unicode 相关的编码或解码错误时引发。
UnicodeEncodeError 当编码过程中发生与 Unicode 相关的错误时引发。
UnicodeDecodeError 当解码过程中发生与 Unicode 相关的错误时引发。
UnicodeTranslateError 当翻译过程中发生与 Unicode 相关的错误时引发。
ValueError 当函数获取到一个类型正确但值不合适的参数时引发。
ZeroDivisionError 当除法或模运算的第二个操作数为零时引发。

如果需要,我们也可以在 Python 中定义自己的异常。要了解更多信息,请访问 Python 用户自定义异常

我们可以使用 tryexceptfinally 语句在 Python 中处理这些内置和用户自定义的异常。要了解更多信息,请访问 Python try、except 和 finally 语句


Python 错误与异常

错误表示诸如编译错误、语法错误、代码逻辑部分错误、库不兼容、无限递归等情况。

错误通常超出了程序员的控制范围,我们不应该尝试处理错误。

异常可以被程序捕获和处理。

现在我们了解了异常,我们将在下一个教程中学习如何处理异常。

视频:Python 异常处理

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战