技术与生活 / 一篇记录
异常处理,别把真正的问题藏起来
捕获异常的目的是在当前层采取有意义的恢复措施。转换失败可以给用户输入提示,文件缺失可以说明路径;一律返回空值却会让错误在更远处才爆发。
先明确这里的区别
捕获异常应对应可处理的故障,不要把所有错误都悄悄吞掉。
以下示例使用 Python 3,文件路径和输入值均为练习样本。
try:
value = int('abc')
except ValueError as exc:
print(type(exc).__name__)
怎样判断处理正确
分别测试合法数字与非法输入。
只捕获预期能够处理的类型,并保留足够上下文。若当前层只是记录日志后交给上层处理,应继续抛出异常,避免调用者把失败当成成功。
异常消息可能含有文件路径或请求内容。面向用户的提示与内部诊断可以使用不同细节级别,同时通过任务编号关联。这样既保留排查依据,也避免把不必要的环境信息公开。
需要留意的是,裸 except 容易掩盖中断和程序缺陷。
参考:Python 文档。