Python的上下文管理

本文介绍了Python的上下文管理器,包括其定义、支持上下文管理器协议的对象(如file、decimal.Context等)、with语句的使用以及相关示例。上下文管理器确保了资源的正确初始化和清理,特别是在异常情况下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、定义

2、支持上下文管理器协议的对象

3、with语句

4、例子


1、定义

       1.1  什么是上下文管理器

        上下文管理器是一个包装任意代码块的对象,上下文管理器保证:

        1.进入上下文管理器时,每次代码执行的一致性

        2.当退出上下文管理器时,相关的资源会被正确地回收(即使内部代码出错,退出步骤也会执行)。
        
        1.2  上下文管理器的应用

        上下文管理器被用到最多的就是——作为确保资源正确清理的一种方式。

2、支持上下文管理器协议的对象

  • file
  • decimal.Context
  • thread.LockType
  • threading.Lock
  • threading.RLock
  • threading.Condition
  • threading.Semaphore
  • threading.BoundedSemaphore

3、with语句

        python2.5中加入的关键字with,with语句仅仅能对支持上下文管理协议的对象使用。with语句的表达式的作用是返回一个遵循特定协议的对象,具体来说,该对象必须定义一个__enter__方法和__exit__方法。   

        with 语句会自动执行__entre__方法,退出的时候会自动执行__exit__方法,__exit__ 方法接受三个参数,正常退出这三个参数都是 None,如果发生异常这三个值分别是:异常类、异常值、回溯信息,如果返回值为真(Ture),终止异常,with语句块有异常发生时,程序继续运行,返回值为假(False),就是抛出异常,with语句块有异常发生,程序立马退出。

4、例子

fp = open("a.txt","w+")
print(dir(fp))

with open("a.txt","w+") as fp:
    pass

class ContenxtManager():
    def __enter__(self):
        print("enter called")

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("exit called")
        print("exc_type:",exc_type)
        print("exc_val:",exc_val)
        print("exc_tb",exc_tb)
        # 如果返回值为真(Ture),终止异常,with语句块有异常发生时,程序继续运行
        # 返回值为假(False),就是抛出异常,with语句块有异常发生,程序立马退出
        # return False


with ContenxtManager() as c:
    1/0
    print("*" * 20)
    print("i am contex manager")
    print("*"*20)


print("end ... ")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值