with内部提供两个内置函数enter和exit
enter 在主代码执行之前,exit 在主代码执行之前后,都返回self,自身对象,也可以返回其他
exit()中有四个参数。当程序块中出现异常(exception),exit()的参数中exc_type, exc_value, traceback用于描述异常。我们可以根据这三个参数进行相应的处理。如果正常运行结束,这三个参数都是None。
contextlib是为了加强with语句,提供上下文机制的模块,它是通过Generator实现的。通过定义类以及写enter和exit来进行上下文管理虽然不难,但是很繁琐。contextlib中的contextmanager作为装饰器来提供一种针对函数级别的上下文管理机制
contextlib还有连个重要的东西,一个是nested,一个是closing,前者用于创建嵌套的上下文,后则用于帮你执行定义好的close函数。但是nested已经过时了,因为with已经可以通过多个上下文的直接嵌套了。
python闭包