• 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模块,你可以更方便地创建和使用上下文管理器,以简化资源管理和错误处理代码。

  • 相关阅读:
    android studio运行APP到手机
    Elasticsearch开启用户验证
    卡码网语言基础课 |句子缩写
    腾讯WeTest:为用户开新篇,七周年全球惠享巨献
    数据结构入门————栈和队列(C语言/零基础/小白/新手+模拟实现+例题讲解)
    个人应用接入使用阿里云盘和百度网盘
    全志T3 ARM+Ethercat+Codesys工业控制器设计方案
    基于SSM的校园二手交易网站设计与实现
    Maven系列第8篇:大型Maven项目,快速按需任意构建
    前端——什么是依赖注入与控制反转
  • 原文地址:https://blog.csdn.net/2402_84885073/article/details/139567580