python上下文管理的使用场景实例讲解

 更新时间:2021年03月03日 08:18:27   作者:小妮浅浅  
在本篇文章里小编给大家整理的是一篇关于python上下文管理的使用场景实例讲解内容,有兴趣的朋友们可以学习下。

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生成随机图形验证码详解

    这篇文章主要介绍了python生成随机图形验证码详解,具有一定参考价值,需要的朋友可以参阅。
    2017-11-11
  • python3.6中anaconda安装sklearn踩坑实录

    python3.6中anaconda安装sklearn踩坑实录

    这篇文章主要介绍了python3.6中anaconda安装sklearn踩坑实录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Python 的 Socket 编程

    Python 的 Socket 编程

    这篇文章最初发布的时候标题是“Python的WebSocket编程”,坦白来说有点文不对题。我们在这里打算讨论的仅仅是常规的socket编程。尽管 Web Socket 和常规sockets有点很相似,但又不是同一个东西。那我还是希望这篇文章对你们有点帮助。
    2015-03-03
  • python 用matplotlib绘制折线图详情

    python 用matplotlib绘制折线图详情

    这篇文章主要讲诉了python 用matplotlib绘制折线图的详细内容,众所周知,matplotlib 是一款功能强大开源的数据可视化模块,凭借着强大的扩展性构建出更高级别的绘图工具接口如seaborn、ggplot,下面我们就根据之前两篇文章基础掌握折线图的绘制,需要的朋友可以参考一下
    2021-12-12
  • Python实现猜数字小游戏

    Python实现猜数字小游戏

    这篇文章介绍了Python实现猜数字小游戏,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以收藏下,方便下次浏览观看
    2021-12-12
  • 如何从csv文件构建Tensorflow的数据集

    如何从csv文件构建Tensorflow的数据集

    这篇文章主要介绍了如何从csv文件构建Tensorflow的数据集,帮助大家更好的理解和使用Tensorflow,感兴趣的朋友可以了解下
    2020-09-09
  • python 采用paramiko 远程执行命令及报错解决

    python 采用paramiko 远程执行命令及报错解决

    这篇文章主要介绍了python 采用paramiko 远程执行命令及报错解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • selenium+python实现基本自动化测试的示例代码

    selenium+python实现基本自动化测试的示例代码

    这篇文章主要介绍了selenium+python实现基本自动化测试的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python中csv文件创建、读取及修改等操作实例

    python中csv文件创建、读取及修改等操作实例

    很多程序在处理数据时都会碰到csv这种格式的文件,下面这篇文章主要给大家介绍了关于python中csv文件创建、读取及修改等操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 用Python编写个解释器实现方法接受

    用Python编写个解释器实现方法接受

    计算机只能理解机器码。归根结底,编程语言只是一串文字,目的是为了让人类更容易编写他们想让计算机做的事情。真正的魔法是由编译器和解释器完成,它们弥合了两者之间的差距。解释器逐行读取代码并将其转换为机器码
    2023-01-01

最新评论