IOTXING

记录技术学习之路

0%

Python 上下文管理器

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里面的内容