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

 更新时间:2021年02月07日 17:08:22   作者:小妮浅浅  
在本篇文章里小编给大家整理的是一篇关于python上下文管理器异常问题解决方法,对此有兴趣的朋友们可以学习参考下。

对于异常的使用上,当我们在捕捉到错误时,会有一个抛出的选项让我们做决定。不过加入了上下文管理器后,就不用对异常进行选择了,因为其作用是不必抛出。下面我们就python上下文管理器处理异常进行说明,分析其中的三个参数,最后带来一个处理异常的实例供大家进行学习。

1、异常说明

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

2、参数

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

  • exc_type:异常类型
  • exc_val:异常值
  • exc_tb:异常的错误栈信息

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

3、异常实例

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

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

class File:
 def __enter__(self):
  return file_obj
 def __exit__(self, exc_type, exc_value, exc_tb):
  # with 退出时释放文件资源
  file_obj.close()
  # 如果 with 内有异常发生 抛出异常
  if exc_type is not None:
   raise exception

在__exit__方法中处理异常实例扩展:

class File(object):
 def __init__(self, file_name, method):
  self.file_obj = open(file_name, method)
 def __enter__(self):
  return self.file_obj
 def __exit__(self, type, value, traceback):
  print("Exception has been handled")
  self.file_obj.close()
  return True
 
with File('demo.txt', 'w') as opened_file:
 opened_file.undefined_function()
 
# Output: Exception has been handled

到此这篇关于python上下文管理器异常问题解决方法的文章就介绍到这了,更多相关python上下文管理器如何解决异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3爬虫里关于识别微博宫格验证码的知识点详解

    Python3爬虫里关于识别微博宫格验证码的知识点详解

    在本篇文章里小编给大家分享了关于Python3爬虫里关于识别微博宫格验证码的知识点,有兴趣的朋友们可以参考下。
    2020-07-07
  • python实现自动发送邮件发送多人、群发、多附件的示例

    python实现自动发送邮件发送多人、群发、多附件的示例

    下面小编就为大家分享一篇python实现自动发送邮件发送多人、群发、多附件的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Python实现读取及写入csv文件的方法示例

    Python实现读取及写入csv文件的方法示例

    这篇文章主要介绍了Python实现读取及写入csv文件的方法,涉及Python针对csv格式文件的读取、遍历、写入等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Python接口自动化测试的实现

    Python接口自动化测试的实现

    这篇文章主要介绍了Python接口自动化测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python 读文件,然后转化为矩阵的实例

    python 读文件,然后转化为矩阵的实例

    下面小编就为大家分享一篇python 读文件,然后转化为矩阵的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 解决Django no such table: django_session的问题

    解决Django no such table: django_session的问题

    这篇文章主要介绍了解决Django no such table: django_session的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python列表append()函数使用方法详解

    Python列表append()函数使用方法详解

    python中的append()函数是在列表末尾添加新的对象,且将添加的对象最为一个整体,下面这篇文章主要给大家介绍了关于Python列表append()函数使用方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python+selenium打印当前页面的titl和url方法

    python+selenium打印当前页面的titl和url方法

    今天小编就为大家分享一篇python+selenium打印当前页面的titl和url方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python中类方法@classmethod和静态方法@staticmethod解析

    Python中类方法@classmethod和静态方法@staticmethod解析

    这篇文章主要介绍了Python中类方法@classmethod和静态方法@staticmethod解析,python中存在三种方法,分别为常规方法(定义中传入self)、@classmethod修饰的类方法、@staticmethod修饰的静态方法,,需要的朋友可以参考下
    2023-08-08
  • python 实现长数据完整打印方案

    python 实现长数据完整打印方案

    这篇文章主要介绍了python 实现长数据完整打印方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论