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项目发布为exe可执行程序过程分享
Oct 23 Python
python对日志进行处理的实例代码
Oct 06 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
Python中作用域的深入讲解
Dec 10 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
详解Python字典的操作
Mar 04 Python
python django 原生sql 获取数据的例子
Aug 14 Python
Python集合操作方法详解
Feb 09 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Apr 20 Python
Python如何实现的二分查找算法
May 27 Python
Python如何解除一个装饰器
Aug 07 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 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
Zerg基本策略
2020/03/14 星际争霸
php启用zlib压缩文件的配置方法
2013/06/12 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
实例教学如何写vue插件
2017/11/30 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python 获取项目根路径的代码
2019/09/27 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
护士的岗位职责
2013/12/04 职场文书
大学生职业规划论文
2014/01/11 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
欢迎领导检查标语
2014/06/27 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
文明礼仪倡议书
2015/04/28 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript