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
  • asp之家 网络编程 m.aspxhome.com