python上下文管理的使用场景实例讲解
1、上下文管理的使用场景
凡是要在代码块前后插入代码的场景,这点和装饰器类似。
资源管理类:申请和回收,包括打开文件、网络连接、数据库连接等;
权限验证。
2、实例
>>>withContext(): ...raiseException#直接抛出异常 ... entercontext exitcontext Traceback(mostrecentcalllast): File"/usr/local/python3/lib/python3.6/site-packages/IPython/core/interactiveshell.py",line2862,inrun_code exec(code_obj,self.user_global_ns,self.user_ns) File"",line2,in raiseException Exception
知识点扩展:
python上下文管理器异常问题解决方法
异常实例
如果我们需要对异常做特殊处理,就可以在这个方法中实现自定义逻辑。
之所以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上下文管理的使用场景内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。