Python 上下文管理器
with open('1.txt) as f:
f.read()
很多人都见到过这种用法,使用with更加方便,可以还能够优雅的捕获到异常,并且最终会将文件关闭。这其实是利用了python里面的上下文管理器,只是在使用with的时候,自动创建了一个上下文管理器。
自己实现上下文管理器
class echo:
def __enter__(self):
print 'enter'
def __exit__(self, *args):
print 'exit'
with echo() as e:
print '测试'
在进入类的时候,会执行enter,退出的时候,会执行exit方法
Python 官方提供了contextlib来方便我们书写上下文管理器
from contextlib import contextmanager
@contextmanager
def check():
print 'start Check'
try:
yield
except Exception,e:
print e
finally:
print 'exit Check'
with check() as check:
a = '12'
c = a+2
start Check
cannot concatenate 'str' and 'int' objects
exit Check
通过使用with check(),程序会先进入到check函数内部,一直运行到yield,然后继续返回到代码部分,如果遇到异常 ,则会进入check()里面的except部分。最终还会执行finally里面的内容