欢迎光临散文网 会员登陆 & 注册

Python上下文管理器

2023-08-22 14:04 作者:韭菜怎么卖  | 我要投稿

    首先造一个传统意义上的上下文管理器:

    它其实有个等价写法:

    也就是说,以下两种写法都能实现上下文管理:

    唯一的区别就是,如果使用 contextmanager 制作装饰器类型的上下文管理器,当你的代执行内容报错的时候,yield处是没有处理错误逻辑的代码的。也就是使用 @TimerContextManager() 会在抛出 TypeError 后打印出 cost_time,但是使用 @contextmanager 的 @timer() 不会抛出。

    如果你希望它抛出,需要加一个异常处理:

    你也可以选择不抛出错误而是记录一个 message,最终定制错误类型并且将这个 message打印/日记记录出来。怎么操作是你的事情。

    这个东西很好用,你可以用它来做异步爬虫 session、数据库连接池、日志工具。

Python上下文管理器的评论 (共 条)

分享到微博请遵守国家法律