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


Posted in Python onFebruary 07, 2021

对于异常的使用上,当我们在捕捉到错误时,会有一个抛出的选项让我们做决定。不过加入了上下文管理器后,就不用对异常进行选择了,因为其作用是不必抛出。下面我们就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上下文管理器如何解决异常内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python调用shell的方法
Nov 20 Python
Python FTP操作类代码分享
May 13 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
Python下简易的单例模式详解
Apr 08 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
详解python深浅拷贝区别
Jun 24 Python
python join方法使用详解
Jul 30 Python
python高级特性简介
Aug 13 Python
python中@contextmanager实例用法
Feb 07 #Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 #Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 #Python
Python中全局变量和局部变量的理解与区别
Feb 07 #Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 #Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 #Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 #Python
You might like
使用php4加速网络传输
2006/10/09 PHP
php实现的通用图片处理类
2015/03/24 PHP
php实现购物车功能(上)
2020/07/23 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python如何修改装饰器中参数
2018/03/20 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
python中的变量如何开辟内存
2018/06/26 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
什么是数据抽象
2016/11/26 面试题
教师开学感言
2014/02/14 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书