当前位置: 首页 > news >正文

Python中的上下文管理器(contextlib)模块

Python中的contextlib模块提供了一些用于创建和管理上下文管理器(context managers)的工具。上下文管理器是实现了__enter__()__exit__()方法的对象,它们通常用于确保在代码块执行前后执行某些操作,比如资源获取与释放、设置和重置环境、错误处理等。with语句与上下文管理器一起使用,可以自动处理这些操作,使代码更加简洁和健壮。

contextlib模块提供了几个有用的函数和类,用于创建和管理上下文管理器,主要包括:

  1. contextlib.contextmanager:这是一个装饰器,用于将生成器函数转化为上下文管理器。在生成器函数中,使用yield语句分隔__enter__()__exit__()方法的逻辑。

示例:

 

python复制代码

from contextlib import contextmanager
@contextmanager
def managed_resource(*args, **kwds):
# __enter__ 逻辑
resource = acquire_resource(*args, **kwds)
try:
yield resource
finally:
# __exit__ 逻辑
release_resource(resource)
# 使用 with 语句
with managed_resource(arg1, arg2) as resource:
# 使用 resource
pass
  1. contextlib.ExitStack:这是一个上下文管理器,可以处理多个上下文管理器的__enter__()__exit__()调用。这使得可以方便地管理一组需要同时设置和清理的资源。

示例:

 

python复制代码

from contextlib import ExitStack
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filelist]
# 使用 files 列表中的文件
  1. contextlib.nullcontext:这是一个不做任何操作的上下文管理器,通常用于在不需要实际上下文管理的情况下与with语句一起使用。

示例:

 

python复制代码

from contextlib import nullcontext
with nullcontext(obj) as result:
# 这里 result 就是 obj,但没有任何额外的操作
pass
  1. contextlib.suppress:这是一个上下文管理器,用于抑制指定的异常。在with语句块中,指定的异常会被捕获并忽略,不会传播到外部。

示例:

 

python复制代码

from contextlib import suppress
with suppress(FileNotFoundError):
os.remove('somefile.tmp')
# 如果 somefile.tmp 不存在,则不会抛出 FileNotFoundError

通过使用contextlib模块,你可以更方便地创建和使用上下文管理器,以简化资源管理和错误处理代码。

http://www.lryc.cn/news/367989.html

相关文章:

  • C语言:定义和使用结构体变量
  • Vue3学习第二天记录
  • C语言:双链表
  • Java物业管理系统+数据库应用程序开发[JavaSE+JDBC+idea控制台+MySQL]
  • 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。.net 读取excel的时候报错(实测有效)
  • JVM垃圾收集器和性能调优
  • 汽车EDI——Volvo EDI 项目案例
  • Qt应用程序发布
  • Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库
  • Linux Kernel nf_tables 本地权限提升漏洞(CVE-2024-1086)
  • [word] word如何清除超链接 #媒体#笔记#知识分享
  • 【Linux】进程(9):进程控制1
  • 华为RH2288H V3服务器iBMC的SSL证书续期
  • ubuntu开机黑屏
  • 【risc-v】arm和riscv有什么关系或者联系?
  • Flutter项目开发模版,开箱即用
  • 私有仓库搭建
  • axios设置 responseType为 “stream“流式获取后端数据
  • Apache POI(使用Java读写Excel表格数据)
  • golang中只用定义不用初始化的类型规律总结
  • 数据库之PostgreSQL详解
  • 找出链表倒数第k个元素-链表题
  • ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】
  • 【Unity】资源管理与热更 YooAsset+HybridCLR
  • PDF批量加水印 与 去除水印实践
  • 【MySQL】服务器配置和管理
  • 限流定义、算法、实施方案
  • [312. 戳气球] 动态规划寻找转移函数
  • 以操作系统和Java的视角看“中断“
  • 【运维】如何在Ubuntu 22上使用Python 3.8的虚拟环境