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入门篇之对象类型
Oct 17 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
TensorFlow实现模型评估
Sep 07 Python
python实现简易动态时钟
Nov 19 Python
python3.6使用tkinter实现弹跳小球游戏
May 09 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
Jun 24 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
python实现视频压缩功能
Dec 18 Python
详解PyTorch模型保存与加载
Apr 28 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 各种应用乱码问题的解决方法
2010/05/09 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
完美的php分页类
2017/10/24 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
Python中正则表达式的详细教程
2015/04/30 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python连接mongodb集群方法详解
2020/02/13 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
教师年度考核自我鉴定
2014/01/19 职场文书
护理心得体会范文
2016/01/22 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
详解JS数组方法
2021/11/20 Javascript