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简单实现计算过期时间的方法
Jun 09 Python
关于Python数据结构中字典的心得
Dec 04 Python
浅析Python数据处理
May 02 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
python实现年会抽奖程序
Jan 22 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
scrapy头部修改的方法详解
Dec 06 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
python爬取豆瓣电影排行榜(requests)的示例代码
Feb 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
PHP基础之运算符的使用方法
2013/04/28 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
php中动态调用函数的方法
2015/03/16 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
Python常用的日期时间处理方法示例
2015/02/08 Python
python字典排序实例详解
2015/05/20 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
技校生自我鉴定
2013/12/08 职场文书
群众路线党课主持词
2014/04/01 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers