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中操作字符串之startswith()方法的使用
May 20 Python
Django中使用locals()函数的技巧
Jul 16 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
python http基本验证方法
Dec 26 Python
python调用staf自动化框架的方法
Dec 26 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
Python unittest基本使用方法代码实例
Jun 29 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 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
又一个php 分页类实现代码
2009/12/03 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
详解php命令注入攻击
2019/04/06 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
node学习记录之搭建web服务器教程
2017/02/16 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
详解Vite的新体验
2021/02/22 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
python 开发的三种运行模式详细介绍
2017/01/18 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
Python多进程编程常用方法解析
2020/03/26 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
服装电子商务创业计划书
2014/01/30 职场文书
医院总经理岗位职责
2014/02/04 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
警校毕业生自我评价
2014/04/06 职场文书
会计毕业生自荐书
2014/06/12 职场文书
最新离婚协议书范本
2014/08/19 职场文书
2014年司法局工作总结
2014/12/11 职场文书