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随机读取文件实现实例
May 25 Python
Python编程求质数实例代码
Jan 31 Python
通过Python 接口使用OpenCV的方法
Apr 02 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
Python设计模式之代理模式实例详解
Jan 19 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
python向图片里添加文字
Nov 26 Python
在Tensorflow中查看权重的实现
Jan 24 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
通过代码实例了解Python3编程技巧
Oct 13 Python
Python 3.9的到来到底是意味着什么
Oct 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
二招解决php乱码问题
2012/03/25 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
php实现将Session写入数据库
2015/07/26 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
axios学习教程全攻略
2017/03/26 Javascript
vue组件学习教程
2017/09/09 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
详解AngularJS之$window窗口对象
2018/01/17 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
Python代码调试的几种方法总结
2015/04/15 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
银行职员自我鉴定
2014/04/20 职场文书
中等生评语大全
2014/05/04 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
2015年工商所工作总结
2015/05/21 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android