捕获任意异常
try:
1 / 0
except Exception as e:
print(e)
## 捕获特定异常
def sand_box(cb):
try:
return cb()
except ZeroDivisionError:
print('除数不能为零')
def division_zero():
return 1 / 0
def arr_out_index():
return [1, 2][3]
sand_box(division_zero)
# -> 除数不能为零
sand_box(arr_out_index)
# -> IndexError: list index out of range
## 多错误类型
def sand_box(cb):
try:
return cb()
except ZeroDivisionError:
print('除数不能为零')
except IndexError:
print('数组越界')
def division_zero():
return 1 / 0
def arr_out_index():
return [1, 2][3]
sand_box(division_zero)
# -> 除数不能为零
sand_box(arr_out_index)
# -> 数组越界
## finally
def sand_box(cb):
try:
return cb()
except Exception as e:
print('获取异常', e)
finally:
print('结束') # 无论是否存在异常, 都将被执行
def division_zero():
return 1 / 0
def division():
return 1 / 1
sand_box(division_zero)
# -> 获取异常 division by zero
# -> 结束
sand_box(division)
# -> 结束
## 异常内返回
* 01执行函数内返回
def sand_box(cb):
try:
return cb()
except Exception as e:
print('获取异常', e)
finally:
print('结束')
def division_zero():
return 1 / 0
def division():
return 1 / 1
print(sand_box(division_zero))
print(sand_box(division))
获取异常 division by zero 结束 None 结束 1.0
* 异常捕获内返回
def sand_box(cb):
try:
return cb()
except Exception as e:
print('获取异常', e)
return 'ERROR'
finally:
print('结束')
def division_zero():
return 1 / 0
def division():
return 1 / 1
print(sand_box(division_zero))
print(sand_box(division))
获取异常 division by zero 结束 ERROR 结束 1.0
* finally 内返回
def sand_box(cb):
try:
return cb()
except Exception as e:
print('获取异常', e)
return 'ERROR'
finally:
print('结束')
return "END"
def division_zero():
return 1 / 0
def division():
return 1 / 1
print(sand_box(division_zero))
print(sand_box(division))
```
获取异常 division by zero
结束
END
结束
END
```
如果 finally 内存在返回值,将覆盖异常处理内的返回值
异常抛出
def sand_box():
try:
raise Exception('这是条异常')
except Exception as e:
print('捕获异常: ', e)
sand_box()
# -> 捕获错误 这是条异常
## 自定义异常类
class Self_Exception(Exception):
def __init__(self, msg, type) -> None:
self.msg = msg
self.type = type
def __str__(self) -> str:
return self.msg
def sand_box():
try:
raise Self_Exception('自定义异常', 'BOOM')
except Exception as e:
print('捕获异常: ', e)
print(e.type) # 获取自定义异常数据
sand_box()
# -> 捕获异常: 自定义异常
# -> BOOM
异常基类
- Exception 非系统退出异常
- ArithmeticError 算术类异常
- BufferError 缓冲区异常
- LookupError 键,索引异常
常见异常类型
- ArributeError 属性取值、赋值异常
- EOFError 文件读取结束
- ImportError 模块引入异常
- ModuleNotFoundError 模块未找到
- IndexError 索引越界
- KeyError 键未找到
- NameError 变量未找到
- OSError 系统异常