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使用cookielib库示例分享
Mar 03 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
Python切片用法实例教程
Sep 08 Python
Python 列表list使用介绍
Nov 30 Python
python实现计算倒数的方法
Jul 11 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
Python快速查找list中相同部分的方法
Jun 27 Python
python爬取淘宝商品销量信息
Nov 16 Python
python存储16bit和32bit图像的实例
Dec 05 Python
使用Python在Windows下获取USB PID&VID的方法
Jul 02 Python
flask应用部署到服务器的方法
Jul 12 Python
利用anaconda作为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
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php cli换行示例
2014/04/22 PHP
php实现的ping端口函数实例
2014/11/12 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
JavaScript中的闭包原理分析
2010/03/08 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
js对象的比较
2011/02/26 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
20招让你的Python飞起来!
2016/09/27 Python
python中requests和https使用简单示例
2018/01/18 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
Django之腾讯云短信的实现
2020/06/12 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
护士检查书
2014/01/17 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
Python简易开发之制作计算器
2022/04/28 Python