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实现Linux下守护进程的编写方法
Aug 22 Python
Python实现的tab文件操作类分享
Nov 20 Python
在Python中编写数据库模块的教程
Apr 29 Python
Python回调函数用法实例详解
Jul 02 Python
python executemany的使用及注意事项
Mar 13 Python
Python使用wxPython实现计算器
Jan 30 Python
python实现Adapter模式实例代码
Feb 09 Python
Python判断telnet通不通的实例
Jan 26 Python
wxpython绘制音频效果
Nov 18 Python
Python模块的制作方法实例分析
Dec 21 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 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 ftp文件上传函数(基础版)
2010/06/03 PHP
PHP中static关键字原理的学习研究分析
2011/07/18 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
JavaScript类的写法
2016/09/17 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
详解Python中break语句的用法
2015/05/14 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
python实现简单日期工具类
2019/04/24 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python