python上下文管理器如何解决异常?

python上下文管理器如何解决异常?

本文教程操作环境:windows7系统、python 3.9.1,DELL G3电脑。

1、异常说明

异常可以在__exit__ 进行捕获并由你自己决定如何处理,是抛出还是不抛出。在__exit__ 里返回 True(没有return 就默认为 return False),就相当于告诉 python解释器,这个异常我们已经捕获了,不需要再往外抛了

2、参数

__exit__ 函数时,需要注意的事,它必须要有这三个参数:

exc_type:异常类型

exc_val:异常值

exc_tb:异常的错误栈信息

当主逻辑代码没有报异常时,这三个参数将都为None。

3、异常实例

如果我们需要对异常做特殊处理,就可以在这个方法中实现自定义逻辑。

之所以 with 能够自动关闭文件资源,就是因为内置的文件对象实现了上下文管理器协议,这个文件对象的 __enter__ 方法返回了文件句柄,并且在 __exit__ 中实现了文件资源的关闭,另外,当 with 语法块内有异常发生时,会抛出异常给调用者。

classFile:

def__enter__(self):
returnfile_obj

def__exit__(self,exc_type,exc_value,exc_tb):
#with退出时释放文件资源
file_obj.close()
#如果with内有异常发生抛出异常
ifexc_typeisnotNone:
raiseexception