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 相关文章推荐
tornado框架blog模块分析与使用
Nov 21 Python
Python中类的继承代码实例
Oct 28 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
Django框架首页和登录页分离操作示例
May 28 Python
python的sorted用法详解
Jun 25 Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 Python
解决Python中回文数和质数的问题
Nov 24 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 Python
python urllib和urllib3知识点总结
Feb 08 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
Oct 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
JS模拟自动点击的简单实例
2013/08/08 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
wxPython实现整点报时
2019/11/18 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
工程造价专业大学生职业规划范文
2014/03/09 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
违章停车检讨书
2014/10/21 职场文书
学校端午节活动总结
2015/02/11 职场文书
退税申请报告怎么写
2015/05/18 职场文书
学校少先队工作总结
2015/08/12 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
MySQL 计算连续登录天数
2022/05/11 MySQL