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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
python学生信息管理系统
Mar 13 Python
Python3 replace()函数使用方法
Mar 19 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
python实现决策树分类
Aug 30 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
Python循环实现n的全排列功能
Sep 16 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
详解tensorflow之过拟合问题实战
Nov 01 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 Cookie的使用教程详解
2013/06/03 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
2018/05/31 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
Python中的字符串查找操作方法总结
2016/06/27 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
python实现简单的五子棋游戏
2020/09/01 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
工程总经理工作职责
2013/12/09 职场文书
一句话工作感言
2014/03/01 职场文书
土地转让协议书
2014/04/15 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
行政处罚告知书
2015/07/01 职场文书
2015年国庆节寄语
2015/08/17 职场文书
python的变量和简单数字类型详解
2021/09/15 Python