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轻松实现代码编码格式转换
Mar 26 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Pycharm修改python路径过程图解
May 22 Python
基于pandas向csv添加新的行和列
May 25 Python
Python中SQLite如何使用
May 27 Python
Python使用pyenv实现多环境管理
Feb 05 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
python 安全地删除列表元素的方法
Mar 16 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文件的方法
2014/11/04 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
四个PHP非常实用的功能
2015/09/29 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
python目录与文件名操作例子
2016/08/28 Python
Python实现随机选择元素功能
2017/09/14 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
python生成带有表格的图片实例
2019/02/03 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
我就是这样学习Python中的列表
2019/06/02 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
接待员岗位责任制
2014/02/10 职场文书
房地产广告策划方案
2014/05/15 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
python实现简易名片管理系统
2021/04/11 Python
React配置子路由的实现
2021/06/03 Javascript