python上下文管理的使用场景实例讲解
作者:小妮浅浅 时间:2022-01-31 08:38:33
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
来源:https://www.py.cn/jishu/jichu/27201.html
标签:python,上下文管理
0
投稿
猜你喜欢
python 将列表里的字典元素合并为一个字典实例
2021-07-26 15:45:09
Linux下远程连接Jupyter+pyspark部署教程
2021-03-31 18:35:59
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2024-04-22 13:02:59
Python Ruby 等语言弃用自增运算符原因剖析
2022-10-11 07:42:31
Python线程池thread pool创建使用及实例代码分享
2022-02-26 00:43:35
SQL进行排序、分组、统计的10个新技巧
2009-01-23 13:59:00
加速 PyTorch 模型训练的 9 个技巧(收藏)
2023-12-17 10:35:58
Python爬虫动态ip代理防止被封的方法
2022-01-24 00:15:30
Tensorflow获取张量Tensor的具体维数实例
2021-12-24 20:25:10
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2021-08-11 14:08:22
Python入门:认识列表和元组
2022-11-06 02:18:42
Python将脚本程序转变为可执行程序的实现
2022-03-02 16:30:49
Go语言题解LeetCode1260二维网格迁移示例详解
2024-04-29 13:04:53
asp的access数据库备份 压缩 恢复及清理数据库函数
2008-10-31 12:36:00
OpenCV实现图片亮度增强或减弱
2022-09-16 00:15:04
js友好的表单验证程序vform
2007-08-16 13:32:00
PHP实现git部署的方法教程
2023-07-17 05:30:33
python分布式计算dispy的使用详解
2021-01-14 09:15:24
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2022-07-12 03:01:11
phpstorm断点调试方法图文详解
2023-05-30 01:06:40