Python 异常处理入门:try/except/finally 用法与常见坑

举报
yd_283969375 发表于 2026/11/04 00:16:50 2026/11/04
【摘要】 异常处理的目标不是让程序永不报错,而是让错误可预期、可定位。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)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。