小小张说故事
Python 的 with 到底在管什么?拆开上下文管理器:__exit__ 返回值决定生死,异常从 yield 灌进去
原创
关注作者
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
小小张说故事
社区首页
>
专栏
>
Python 的 with 到底在管什么?拆开上下文管理器:__exit__ 返回值决定生死,异常从 yield 灌进去
Python 的 with 到底在管什么?拆开上下文管理器:__exit__ 返回值决定生死,异常从 yield 灌进去
小小张说故事
关注
发布于 2026-10-21 08:41:52
发布于 2026-10-21 08:41:52
76
0
举报
概述
with 不是 try/finally 的语法糖:__enter__ 拿资源、__exit__ 还资源,__exit__ 返回 True 当场吞异常、False 原样穿透;@contextmanager 把切面架在 yield 上——with 块体的异常不是被 except 抓的,是从 yield 灌进去的。实测协议本身 353 ns,6 组实验拆到底。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
python
目录
1. 两次调用:with 的全部秘密
2. __exit__ 的返回值 = 异常的生杀大权
3. @contextmanager:yield 是 enter/exit 的分界线
4. 异常不是被 except 抓的,是被 throw 进去的
5. 异常被吞的三种死法,逐一排雷
6. 协议本身 353 纳秒,但别在热点里开火锅店
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档