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 list中append()与extend()用法分享
Mar 24 Python
Python提取Linux内核源代码的目录结构实现方法
Jun 24 Python
查看Django和flask版本的方法
May 14 Python
Python正则表达式指南 推荐
Oct 09 Python
详解python中的数据类型和控制流
Aug 08 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
Python实现井字棋小游戏
Mar 09 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
Python实现转换图片背景颜色代码
Apr 30 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 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
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
js获取内联样式的方法
2015/01/27 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
Python 文件重命名工具代码
2009/07/26 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
详解python中的线程与线程池
2019/05/10 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
北京大学自荐信范文
2014/01/28 职场文书
中秋节主持词
2014/04/02 职场文书
经济贸易系求职信
2014/08/04 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
公司人力资源管理制度
2015/08/05 职场文书
中学音乐课教学反思
2016/02/18 职场文书