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实现PS滤镜的旋转模糊功能示例
Jan 20 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
Python shutil模块用法实例分析
Oct 02 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
Python检测端口IP字符串是否合法
Jun 05 Python
python能在浏览器能运行吗
Jun 17 Python
Python操控mysql批量插入数据的实现方法
Oct 27 Python
python 将html转换为pdf的几种方法
Dec 29 Python
Matplotlib配色之Colormap详解
Jan 05 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
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
初学Python实用技巧两则
2014/08/29 Python
Python的面向对象思想分析
2015/01/14 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
pycharm配置git(图文教程)
2019/08/16 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
opencv实现图像几何变换
2021/03/24 Python
外贸主管求职简历的自我评价
2013/10/23 职场文书
建筑工程技术应届生求职信
2013/11/17 职场文书
我的老师教学反思
2014/05/01 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书