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中DJANGO简单测试实例
May 11 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
Python模拟三级菜单效果
Sep 11 Python
Python实现的凯撒密码算法示例
Apr 12 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
Java如何基于wsimport调用wcf接口
Jun 17 Python
详解Anaconda 的安装教程
Sep 23 Python
python 如何在测试中使用 Mock
Mar 01 Python
Python中使用subprocess库创建附加进程
May 11 Python
使用Python获取字典键对应值的方法
Apr 26 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
javascript数组组合成字符串的脚本
2021/01/06 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
python实现的希尔排序算法实例
2015/07/01 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Python实现全排列的打印
2018/08/18 Python
python实现电子产品商店
2019/02/26 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
应届大专毕业生自我鉴定
2014/04/08 职场文书
自查自纠整改报告
2014/11/06 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
吴仁宝观后感
2015/06/09 职场文书
防震减灾主题班会
2015/08/14 职场文书
责任书格式
2019/04/18 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
Golang 实现WebSockets
2022/04/24 Golang
Redis高并发缓存架构性能优化
2022/05/15 Redis