python上下文管理的使用场景实例讲解


Posted in Python onMarch 03, 2021

1、上下文管理的使用场景

凡是要在代码块前后插入代码的场景,这点和装饰器类似。

资源管理类:申请和回收,包括打开文件、网络连接、数据库连接等;

权限验证。

2、实例

>>> with Context():
...   raise Exception # 直接抛出异常
...
enter context
exit context
Traceback (most recent call last):
 File "/usr/local/python3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2862, in run_code
  exec(code_obj, self.user_global_ns, self.user_ns)
 File "<ipython-input-4-63ba5aff5acc>", line 2, in <module>
  raise Exception
Exception

知识点扩展:

python上下文管理器异常问题解决方法

异常实例

如果我们需要对异常做特殊处理,就可以在这个方法中实现自定义逻辑。

之所以 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中optparse模块使用浅析
Jan 01 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
Python实现邮件的批量发送的示例代码
Jan 23 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
导致python中import错误的原因是什么
Jul 01 Python
pytorch加载自己的图像数据集实例
Jul 07 Python
python如何用matplotlib创建三维图表
Jan 26 Python
pip install命令安装扩展库整理
Mar 02 #Python
python实现杨辉三角的几种方法代码实例
Mar 02 #Python
python爬虫破解字体加密案例详解
Mar 02 #Python
python包的导入方式总结
Mar 02 #Python
numpy实现RNN原理实现
Mar 02 #Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 #Python
python Protobuf定义消息类型知识点讲解
Mar 02 #Python
You might like
php&amp;java(二)
2006/10/09 PHP
php 全局变量范围分析
2009/08/07 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
浅谈webpack对样式的处理
2018/01/05 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
俄罗斯韩国化妆品网上商店:Cosmasi.ru
2019/10/31 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
党课培训心得体会
2014/09/02 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
合作协议书范本
2014/10/25 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
爱的教育读书笔记
2015/06/26 职场文书
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server
MySQL如何使备份得数据保持一致
2022/05/02 MySQL