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 Tkinter GUI编程入门介绍
Mar 10 Python
Python中模块string.py详解
Mar 12 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
pytorch 自定义数据集加载方法
Aug 18 Python
python+mysql实现个人论文管理系统
Oct 25 Python
python剪切视频与合并视频的实现
Mar 03 Python
Python生成器实现简单"生产者消费者"模型代码实例
Mar 27 Python
Python pip 常用命令汇总
Oct 19 Python
详解Python中string模块除去Str还剩下什么
Nov 30 Python
Django程序的优化技巧
Apr 29 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
JAVA/JSP学习系列之七
2006/10/09 PHP
php生成静态页面的简单示例
2014/04/17 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
kafka-python批量发送数据的实例
2018/12/27 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
医学生自荐信范文
2013/12/03 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
情感电台广播稿
2015/08/18 职场文书