跳到主要内容

Python 异常

提示
  1. Python 异常处理:程序执行中出现的意外事件称为异常,例如除以零(ZeroDivisionError)或文件找不到(FileNotFoundError)。
  2. 内置异常类型:Python 提供了许多内置异常,如 IndexErrorTypeError 等,用于处理特定的运行时错误。
  3. 错误与异常的区别:错误通常是无法控制的编译或语法问题,而异常是可以通过程序捕获并处理的运行时问题。

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

divide_by_zero = 7 / 0

上述代码会引发异常,因为不可能将一个数除以 0

让我们详细了解 Python 异常。

Python 逻辑错误(异常)

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

例如,当我们

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

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

如果没有正确处理,它会打印出错误的回溯以及关于为什么会发生该错误的一些细节。

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

divide_numbers = 7 / 0
prit(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 编程内置异常及其引起的错误:

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

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

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

Python 错误和异常

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

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

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

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