Python 异常
提示
- Python 异常处理:程序执行中出现的意外事件称为异常,例如除以零(
ZeroDivisionError
)或文件找不到(FileNotFoundError
)。 - 内置异常类型:Python 提供了许多内置异常,如
IndexError
、TypeError
等,用于处理特定的运行时错误。 - 错误与异常的区别:错误通常是无法控制的编译或语法问题,而异常是可以通过程序捕获并处理的运行时问题。
异常是在程序执行期间发生的意外事件。例如,
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 编程内置异常及其引起的错误:
异常 | 错误原因 |
---|---|
AssertionError | 当 assert 语句失败时引发。 |
AttributeError | 当属性赋值或引用失败时引发。 |
EOFError | 当 input() 函数遇到文件结束条件时引发。 |
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 try, except 和 finally 语句。
Python 错误和异常
错误 代表诸如编译错误、语法错误、代码逻辑部分的错误、库不兼容、无限递归等条件。
错误通常超出程序员的控制范围,我们不应尝试处理错误。
异常 可以被程序捕获和处理。
现在我们知道了异常,下一教程我们将学习如何处理异常。