Python 异常处理入门:try/except/finally 用法与常见坑
【摘要】 异常处理的目标不是让程序永不报错,而是让错误可预期、可定位。try 放可能出错的代码,except 处理异常,finally 无论是否出错都会执行。try: print(10 / int("0"))except ValueError: print("数字格式不对")except ZeroDivisionError: print("除数不能为零")finally: pr...
异常处理的目标不是让程序永不报错,而是让错误可预期、可定位。try 放可能出错的代码,except 处理异常,finally 无论是否出错都会执行。
try:
print(10 / int("0"))
except ValueError:
print("数字格式不对")
except ZeroDivisionError:
print("除数不能为零")
finally:
print("本轮结束")
先说三个原则。第一,捕获要具体,优先写 ValueError、KeyError 等具体类型,不要用裸 except,它会吞掉不该吞的异常。第二,不要用异常控制正常流程,判断键是否存在用 in 或 get 更清楚。第三,不要丢掉原始异常,至少记录日志,必要时 raise 重新抛出。
再说三个常见坑。一是 finally 里写 return,会覆盖 try 的返回值,还可能吞掉异常,清理只做释放。二是 except 里只写 pass,等于假装问题不存在。三是手动打开资源后忘记关闭,优先用 with 语句,退出时自动关闭。
记住模板:先校验输入,再用具体 except 处理可预见错误,用 with 或 finally 清理,并保留日志。这样程序既稳健,也好排查。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)