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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
Django中更新多个对象数据与删除对象的方法
Jul 17 Python
定制FileField中的上传文件名称实例
Aug 23 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
利用python画出AUC曲线的实例
Feb 28 Python
对python中return与yield的区别详解
Mar 12 Python
keras 读取多标签图像数据方式
Jun 12 Python
python实现简单遗传算法
Sep 18 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
PHP Cookie学习笔记
2016/08/23 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
js document.write()使用介绍
2014/02/21 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
深入浅析python继承问题
2016/05/29 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Python telnet登陆功能实现代码
2020/04/16 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
什么是Remote Module
2016/06/10 面试题
教师实习的自我鉴定
2013/10/26 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
党员违纪检讨书
2015/05/05 职场文书
邹越演讲观后感
2015/06/15 职场文书
毕业证明书
2015/06/19 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
Linux中sftp常用命令整理
2022/06/28 Servers