本质上解决一个上下文管理的问题
上下文管理解决的问题:
做一件事前后都有事情要做,而做这件事情本身的时候可能有错误出现。
为了保证即使这件事情出了错,整个事情也没有任何遗留的问题。
解决方式:
方法零:使用一个函数wrapper, try except finally
方法一:使用with管理上下文,实现一个类,完成__enter__和__exit__方法
方法二:使用with管理上下文,实现一个函数,用contextlib中的contextmanager实现。
方法二实现,写一个函数,以生成器为界限
生成器之前为前面要跑的代码,生成器之后为之后要跑的代码,生成器返回的是with as 的东西