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设计模式之单例模式实例
Apr 26 Python
python自动格式化json文件的方法
Mar 11 Python
Python使用matplotlib绘制动画的方法
May 20 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
基于python yield机制的异步操作同步化编程模型
Mar 18 Python
python爬取指定微信公众号文章
Dec 20 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
如何学习Python time模块
Jun 03 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 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
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
PHP 图片上传代码
2011/09/13 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
理解javascript闭包
2015/12/15 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
js实现无缝轮播图
2020/03/09 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
python修改字典内key对应值的方法
2015/07/11 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
哪些是python中web开发框架
2020/06/17 Python
英文简历自荐信范文
2013/12/11 职场文书
秘书专业自荐信范文
2013/12/26 职场文书
怎么写好自荐书
2014/03/02 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
vue打包时去掉所有的console.log
2022/04/10 Vue.js