博客导语
讲解完整五元异常结构,纠正新手裸except捕获所有异常的错误写法,梳理官方异常捕获层级、自定义异常业务落地、异常抛出规范。
一、五元完整语法
try:
业务代码
except 指定异常:
异常处理逻辑
else:
无异常时执行
finally:
无论是否异常,必定执行(资源释放专用)
二、异常捕获优先级
必须先捕获子类异常,再捕获父类Exception,顺序颠倒会导致子类捕获失效。禁止使用except:裸捕获,会掩盖系统崩溃异常。
三、自定义异常
继承Exception基类,用于业务自定义报错,例如参数非法、权限不足
class ParamError(Exception):
def __init__(self,msg):
self.msg = msg
def __str__(self):
return self.msg
# 主动抛出
raise ParamError("用户参数为空")
四、生产捕获原则
最小范围捕获:只捕获预知异常,不捕获全部异常
finally只做文件、数据库、socket资源关闭
异常必须打印堆栈traceback,方便排查问题
