Python 异常处理:try、else、finally 的正确搭配

很多代码把所有逻辑都塞进try,出错后又用宽泛的except兜底,结果异常原因被掩盖,资源也没有及时释放。记住各自的分工,代码会清晰很多。

一、各自的职责

  • try:只放可能出错的一小段代码。
    • except:只处理预见得到、能够恢复的异常。
    • else:try没有出错时才执行,放成功后的逻辑。
    • finally:无论成功还是失败都会执行,只放清理工作。

二、正确搭配模式

成功时走try到else,失败时走except,清理工作交给finally:

python 复制代码
def parse_number(text):
    try:
        value = int(text)
    except ValueError:
        print("不是整数")
        return None
    else:
        print(value)
        return value
    finally:
        print("结束")
print(parse_number("42"))
print(parse_number("abc"))

这样,成功和失败的分支互不干扰,结束提示总会打印。

三、常见误区

  • try里放太多代码,出错后很难定位是哪一行。
    • 用宽泛的except把异常吞掉,问题被藏起来。
    • 在finally里写return,会覆盖返回值甚至掩盖异常。
    • 把成功后的逻辑写在try末尾,而不是else里。

四、实用示例:读文件一定记得关文件

python 复制代码
with open("demo.txt", "w", encoding="utf-8") as f:
    f.write("hello\n")
f = open("demo.txt", encoding="utf-8")
try:
    print(f.readline().strip())
finally:
    f.close()
    print("文件已关闭")

记住一句话:try负责尝试,except负责兜底,else负责成功后的事,finally负责清理。

相关推荐
云和数据.ChenGuang1 小时前
Python 单继承与多继承深度剖析:从 MRO 到实战取舍
开发语言·人工智能·python·langchain
威哥爱编程1 小时前
Python 智能体开发实战 02:你的 AI 助教说话像换了个模型?九成的 system prompt 都写错了
python·agent
威哥爱编程1 小时前
Python 智能体开发实战 01:装了三遍环境还在报错?虚拟环境和 DeepSeek 一次配到位
python·agent
时间的情敌1 小时前
OpenLayers 实战|Vue3 + OpenLayers 完整工程案例(加载天地图、要素、弹窗、绘制、WFS)
前端·openlayers
陈随易1 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
前端的日常1 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
小咕聊编程2 小时前
基于Python的豆瓣电影数据可视化系统构建分析
开发语言·python·信息可视化
计算机魔术师2 小时前
谷歌搜索广告踩刹车,AI广告成为救命稻草
前端
总要学点什么2 小时前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析