目录
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 ... ")