在关于文件管理的时候有一个with open语句可以管理文件打开和关闭,在它的背后是2个魔术方法管理的,用来作为会话管理

__enter__(self)

执行了with open之后就会执行,enter返回的参数作为with open之后的as的参数

__exit__(self,exception_type,exception_value,traceback)

当执行完with open所有代码块之后会执行,他可以被用来处理异常,清除工作或者做一些代码块执行完毕之后的日常工作。如果代码执行成功,没有任何异常,那么exception_type、exception_value以及traceback将会是None。否则的话你可以选择处理这个异常或者是直接交给用户处理。如果你想处理这个异常的话,那么必须在__exit__在所有结束之后返回True。

执行结果会因为__exit__抛出异常,可以通过exc_type,exc_val,exc_tb查看,一般有用的是前两个,如果不想给用户看到异常,而是自己处理就返回True即可