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来使用七牛云存储的方法详解
Aug 07 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
python使用zip将list转为json的方法
Dec 31 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python3 enum模块的应用实例详解
Aug 12 Python
python实现小世界网络生成
Nov 21 Python
python绘制彩虹图
Dec 16 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
Python类成员继承重写的实现
Sep 16 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php数组键值用法实例分析
2015/02/27 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
jQuery select的操作实现代码
2009/05/06 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
举例详解Python中yield生成器的用法
2015/08/05 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
Python数据结构之单链表详解
2017/09/12 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
几个数据库方面的面试题
2016/07/01 面试题
小学英语教师先进事迹
2014/05/28 职场文书
2014年化验室工作总结
2014/11/21 职场文书
老员工辞职信范文
2015/05/12 职场文书
python中的被动信息搜集
2021/04/29 Python
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python