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 06 Python
Python列表(list)常用操作方法小结
Feb 02 Python
linux下python抓屏实现方法
May 22 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
答题辅助python代码实现
Jan 16 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
pandas针对excel处理的实现
Jan 15 Python
python爬虫爬取某网站视频的示例代码
Feb 20 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完整的日历类(CLASS)
2006/11/27 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
php和nginx交互实例讲解
2019/09/24 PHP
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
js数组去重的hash方法
2016/12/22 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
详解Python验证码识别
2016/01/25 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Python3 max()函数基础用法
2019/02/19 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
python try...finally...的实现方法
2020/11/25 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
医院实习介绍信
2014/01/12 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
教书育人演讲稿
2014/09/11 职场文书
保证书格式
2015/01/16 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android