python上下文管理器异常问题解决方法
对于异常的使用上,当我们在捕捉到错误时,会有一个抛出的选项让我们做决定。不过加入了上下文管理器后,就不用对异常进行选择了,因为其作用是不必抛出。下面我们就python上下文管理器处理异常进行说明,分析其中的三个参数,最后带来一个处理异常的实例供大家进行学习。
1、异常说明
异常可以在__exit__进行捕获并由你自己决定如何处理,是抛出还是不抛出。在__exit__里返回True(没有return就默认为returnFalse),就相当于告诉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
在__exit__方法中处理异常实例扩展:
classFile(object): def__init__(self,file_name,method): self.file_obj=open(file_name,method) def__enter__(self): returnself.file_obj def__exit__(self,type,value,traceback): print("Exceptionhasbeenhandled") self.file_obj.close() returnTrue withFile('demo.txt','w')asopened_file: opened_file.undefined_function() #Output:Exceptionhasbeenhandled
到此这篇关于python上下文管理器异常问题解决方法的文章就介绍到这了,更多相关python上下文管理器如何解决异常内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!