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类的基础入门知识
Nov 24 Python
在Python中处理时间之clock()方法的使用
May 22 Python
pip matplotlib报错equired packages can not be built解决
Jan 06 Python
DataFrame中的object转换成float的方法
Apr 10 Python
python将list转为matrix的方法
Dec 12 Python
python多进程间通信代码实例
Sep 30 Python
Python 求数组局部最大值的实例
Nov 26 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
django admin 添加自定义链接方式
Mar 11 Python
python pyg2plot的原理知识点总结
Feb 28 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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实现WEB动态网页静态
2006/10/09 PHP
对Session和Cookie的区分与解释
2007/03/16 PHP
php 文件上传类代码
2011/08/06 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
携程英文网站:Trip.com
2017/02/07 全球购物
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
建筑专业自荐信范文
2014/01/05 职场文书
小学生班会演讲稿
2014/01/09 职场文书
保险专业自荐信范文
2014/02/20 职场文书
平安建设实施方案
2014/03/19 职场文书
员工安全责任书范本
2014/07/24 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript
Redis 异步机制
2022/05/15 Redis
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL