Python上下文管理器
python上下文管理器最常用的就是with语句
如:
with open('./aaa.txt','w') as f:
f.write('aaa')
等价于:
f= open('./aaa.txt', 'w')
try:
f.write('aaa')
finally:
f.close()
帮我们省下来很多代码,但并不是所有函数都可以使用with,有两种方法,方法1,定义一个类实现__enter__
和__exit__
方法。第2种方法使用生成器。
方法1 自定义类实现上下文管理
下面我们将举一个例子:
class A:
def __init__(self):
print("init")
def __enter__(self):
print("enter")
#这里可以return with语句需要的句柄或对象
def __exit__(self, typea , value, trance):#如果返回True则不会抛出异常
print("exit")
with A():
print('with')
'''
结果:
init
enter
with
exit
由结果可知,执行顺序是,先执行类的init方法,然后执行enter,然后是with语句包含的代码,然后是exit
'''
定义生成器实现上下文管理
from contextlib import contextmanager #导入上下文管理器
@contextmanager #设置装饰器
def gen():
f = open('aaa.txt','w')
yield f
f.close()
with gen() as f:
f.write("aaa")
需要自己处理异常