Python contextlib模块使用示例

445次阅读  |  发布于5年以前

看这个模块要先看with as的用法,最常用的方法就是打开一个文件:

复制代码 代码如下:

with open("filename") as f:
f.read()

with可以调用一个上下文管理器,产生运行时的上下文环境。上下文管理器主要定义两个方法,enterexitenter返回上下文里操作的对象,如f。exit是销毁对象和异常处理。

contextlib模块对外有三个接口,
contextmanager装饰器,装饰的函数必须是一个生成器。然后返回一个函数,在函数调用的时候返回一个上下文管理器。

nested为了一次调用多个上下文管理器的时候用,将所有上下文管理器里的enter放到vars里,一次yield返回,然后unpack。就产生多个对象了。exit都放到exits列表里,在finally里统一调用,这些exit在调用上下文管理器产生异常时,如何处理。如果返回false,将会把异常继续抛出,返回true则不会抛出异常。

closing,这个用过,没想到的是竟然是个类,而不是个函数。就是把有close方法却没有exit方法的对象变成一个上下文管理器。代码很简单:

复制代码 代码如下:

class closing(object):
def init(self, thing):
self.thing = thing
def enter(self):
return self.thing
def exit(self, *exc_info):
self.thing.close()

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8