• 售前

  • 售后

热门帖子
入门百科

python上下文管理器非常问题解决方法

[复制链接]
如心所愿1 显示全部楼层 发表于 2021-10-25 19:09:36 |阅读模式 打印 上一主题 下一主题
对于非常的利用上,当我们在捕获到错误时,会有一个抛出的选项让我们做决定。不外加入了上下文管理器后,就不消对非常举行选择了,因为其作用是不必抛出。下面我们就python上下文管理器处置惩罚非常举行阐明,分析此中的三个参数,最后带来一个处置惩罚非常的实例供大家举行学习。
1、非常阐明

非常可以在__exit__ 举行捕获并由你自己决定怎样处置惩罚,是抛出还是不抛出。在__exit__ 里返回 True(没有return 就默认为 return False),就相当于告诉 Python解释器,这个非常我们已经捕获了,不必要再往外抛了。
2、参数

在 写__exit__ 函数时,必要留意的事,它必须要有这三个参数:
      
  • exc_type:非常类型  
  • exc_val:非常值  
  • exc_tb:非常的错误栈信息
当主逻辑代码没有报非常时,这三个参数将都为None。
3、非常实例

如果我们必要对非常做特殊处置惩罚,就可以在这个方法中实现自定义逻辑。
之所以 with 能够自动关闭文件资源,就是因为内置的文件对象实现了上下文管理器协议,这个文件对象的 __enter__ 方法返回了文件句柄,并且在 __exit__ 中实现了文件资源的关闭,另外,当 with 语法块内有非常发生时,会抛出非常给调用者。
  1. class File:
  2. def __enter__(self):
  3.   return file_obj
  4. def __exit__(self, exc_type, exc_value, exc_tb):
  5.   # with 退出时释放文件资源
  6.   file_obj.close()
  7.   # 如果 with 内有异常发生 抛出异常
  8.   if exc_type is not None:
  9.    raise exception
复制代码
在__exit__方法中处置惩罚非常实例扩展:
  1. class File(object):
  2. def __init__(self, file_name, method):
  3.   self.file_obj = open(file_name, method)
  4. def __enter__(self):
  5.   return self.file_obj
  6. def __exit__(self, type, value, traceback):
  7.   print("Exception has been handled")
  8.   self.file_obj.close()
  9.   return True
  10. with File('demo.txt', 'w') as opened_file:
  11. opened_file.undefined_function()
  12. # Output: Exception has been handled
复制代码
到此这篇关于python上下文管理器非常题目解决方法的文章就介绍到这了,更多相关python上下文管理器怎样解决非常内容请搜刮草根技术分享以前的文章或继续欣赏下面的相关文章希望大家以后多多支持草根技术分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作