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中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
python基于ID3思想的决策树
Jan 03 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
基于数据归一化以及Python实现方式
Jul 11 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
Django 重写用户模型的实现
Jul 29 Python
python实现邮件发送功能
Aug 10 Python
Python面向对象编程基础实例分析
Jan 17 Python
Django中的模型类设计及展示示例详解
May 29 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
提高python代码运行效率的一些建议
Sep 29 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
jQuery Selector选择器小结
2010/05/06 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
js获取class的所有元素
2013/03/28 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
JS实现密码框效果
2020/09/10 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
汽车促销活动方案
2014/03/31 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
详解nodejs内置模块
2021/05/06 NodeJs
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android