异常是在程序执行期间发生的意外事件。例如,
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+C 或 Delete )时引发。 |
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 用户自定义异常。
我们可以使用 try
、except
和 finally
语句在 Python 中处理这些内置和用户自定义的异常。要了解更多信息,请访问 Python try、except 和 finally 语句。
Python 错误与异常
错误表示诸如编译错误、语法错误、代码逻辑部分错误、库不兼容、无限递归等情况。
错误通常超出了程序员的控制范围,我们不应该尝试处理错误。
异常可以被程序捕获和处理。
现在我们了解了异常,我们将在下一个教程中学习如何处理异常。