Python异常处理¶
约 737 个字 91 行代码 预计阅读时间 4 分钟
介绍¶
Python中有下面几种常见的异常
报错类型 | 描述 |
---|---|
AssertionError | 当assert 断言条件为假的时候抛出的异常 |
AttributeError | 当访问的对象属性不存在的时候抛出的异常 |
IndexError | 超出对象索引的范围时抛出的异常 |
KeyError | 在字典中查找一个不存在的key 抛出的异常 |
NameError | 访问一个不存在的变量时抛出的异常 |
OSError | 操作系统产生的异常 |
SyntaxError | 语法错误时会抛出此异常 |
TypeError | 类型错误,通常是不同类型之间的操作会出现此异常 |
ZeroDivisionError | 进行数学运算时除数为0时会出现此异常 |
Python中的异常处理方式¶
在Python中使用try-except
语句,与其他编程语言类似,try
的代码块包裹可能出现异常的代码,except
后即为异常,如果不写指定异常,则默认捕获所有类型的异常
例如下面的代码:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
如果需要在捕获异常后打印出原始异常的报错,可以添加as
将对应的异常修饰给一个变量,例如下面的代码:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
else
和finally
¶
Python中的异常处理语句中,else
和 finally
块为程序提供了更细粒度的控制,可以在异常处理过程中执行特定的代码。
else
块
用途:当 try
块中没有发生任何异常时执行 else
块的代码
特点:如果在 try
块中捕获到了异常,else
块将被跳过
示例:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 |
|
finally
块
用途:无论是否发生异常,finally
块中的代码都会被执行
特点:常用于释放资源、关闭文件或进行清理工作
示例:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
raise
抛出异常¶
raise
语句用于在程序执行过程中主动抛出异常,以便中断正常的流程并进入异常处理机制。通过 raise
可以做到下面的两件事情:
- 引发内置异常,以提示特定的错误类型。
- 创建并引发自定义异常,以提供更详细的错误信息。
引发内置异常:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
在上述示例中,divide
函数中当检测到除数为零时,使用 raise
抛出 ZeroDivisionError
异常,传递了自定义的错误信息。调用者使用 try-except
块捕获并处理该异常。
也可以定义自己的异常类并在出现异常的位置抛出该自定义异常,以便更精确地描述错误情况。自定义异常需要继承自 Exception
类
定义自定义异常:
Python | |
---|---|
1 2 3 |
|
使用自定义异常:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
重新引发异常¶
在异常处理过程中,可能需要在捕获异常后重新引发,以便上层代码进一步处理。
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
使用 raise
不带参数¶
在 except
块中使用不带参数的 raise
,可以重新引发当前捕获的异常:
Python | |
---|---|
1 2 3 4 5 |
|
这将重新引发之前捕获的 ValueError
。