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操作MySQL简单实现方法
Jan 26 Python
python使用socket连接远程服务器的方法
Apr 29 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
python实现电脑自动关机
Jun 20 Python
python2.7和NLTK安装详细教程
Sep 19 Python
Python中的枚举类型示例介绍
Jan 09 Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
windows支持哪个版本的python
Jul 03 Python
基于python调用jenkins-cli实现快速发布
Aug 14 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 include的妙用,实现路径加密
2008/07/29 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
php实现生成验证码实例分享
2016/04/10 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
浅谈django中的认证与登录
2016/10/31 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
python实现发送邮件
2021/03/02 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
十月份红领巾广播稿
2014/01/22 职场文书
关于安全的广播稿
2014/10/23 职场文书
党校毕业个人总结
2015/02/28 职场文书
致接力运动员加油稿
2015/07/21 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP