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实现k均值算法示例(k均值聚类算法)
Mar 16 Python
Python列表计数及插入实例
Dec 17 Python
python获取指定目录下所有文件名列表的方法
May 20 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
python for 循环获取index索引的方法
Feb 01 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
Python加速程序运行的方法
Jul 29 Python
Python gevent协程切换实现详解
Sep 14 Python
Django model class Meta原理解析
Nov 14 Python
django注册用邮箱发送验证码的实现
Apr 18 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
php不用正则验证真假身份证
2013/11/06 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
再谈javascript原型继承
2014/11/10 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
布同 统计英文单词的个数的python代码
2011/03/13 Python
python的id()函数解密过程
2012/12/25 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
Django url 路由匹配过程详解
2021/01/22 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
精彩的大学生自我评价
2013/11/17 职场文书
养殖项目策划书范文
2014/01/13 职场文书
群众路线表态发言材料
2014/10/17 职场文书
医生个人年终总结
2015/02/28 职场文书
通知函的格式
2015/04/27 职场文书
高二数学教学反思
2016/02/18 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
mysql如何能有效防止删库跑路
2021/10/05 MySQL