首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 的 with 到底在管什么?拆开上下文管理器:__exit__ 返回值决定生死,异常从 yield 灌进去

Python 的 with 到底在管什么?拆开上下文管理器:__exit__ 返回值决定生死,异常从 yield 灌进去

作者头像
小小张说故事
发布于 2026-10-21 08:41:52
发布于 2026-10-21 08:41:52
760
举报
概述
with 不是 try/finally 的语法糖:__enter__ 拿资源、__exit__ 还资源,__exit__ 返回 True 当场吞异常、False 原样穿透;@contextmanager 把切面架在 yield 上——with 块体的异常不是被 except 抓的,是从 yield 灌进去的。实测协议本身 353 ns,6 组实验拆到底。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 1. 两次调用:with 的全部秘密
  • 2. __exit__ 的返回值 = 异常的生杀大权
  • 3. @contextmanager:yield 是 enter/exit 的分界线
  • 4. 异常不是被 except 抓的,是被 throw 进去的
  • 5. 异常被吞的三种死法,逐一排雷
  • 6. 协议本身 353 纳秒,但别在热点里开火锅店
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档