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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
python实现的jpg格式图片修复代码
Apr 21 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
解决Python传递中文参数的问题
Aug 04 Python
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 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 开发环境配置(测试开发环境)
2010/04/28 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP生成唯一订单号
2015/07/05 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
Linux下编译安装MySQL-Python教程
2015/02/02 Python
python实现将内容分行输出
2015/11/05 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
对Django外键关系的描述
2019/07/26 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
python字符串判断密码强弱
2020/03/18 Python
python操作yaml说明
2020/04/08 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
目标责任书格式
2014/07/28 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
通知格式
2015/04/27 职场文书
入党团支部推荐意见
2015/06/02 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS