python上下文管理协议,即with的详细使用

Posted Python信仰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python上下文管理协议,即with的详细使用相关的知识,希望对你有一定的参考价值。

一、with obj as f:

#代码块...

 

二、执行流程:

1.with obj --->触发obj.__enter__(),需要在obj里写__enter__(self),在它里边写返回值,返回给 as f 

2.with obj as f 等同于 f = obj.__enter__()

3.执行with代码块里的程序

4.执行正常时,顺序执行obj中的__exit__()方法,exc_type, exc_val, exc_tb的值都是None.

存在异常时,__exit__()方法中

a. return False返回假时,抛出系统异常。

b. return True 返回假时,吞掉系统异常,自己定制异常信息。

 

三、它的作用:自动清理/释放代码块中程序占用的资源,无须考虑这些问题

class Foo:
    def __init__(self,aa):
        self.aa = aa
    def __enter__(self):
        print(run enter)
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print(run exit)
        print(exc_type)#异常类 如:NameError
        print(exc_val)#异常值 如:name ‘myname‘ is not defined
        print(exc_tb)#追踪信息 如:Traceback (most recent call last): xxxx
        return True
with Foo(11) as cc:
    print(cc.aa)
    print(cc.ff)
print(ssss)

 

 

常见的异常组成部分

Traceback (most recent call last):(追踪信息开始)

  File "D:/workSpace/purePython3/异常.py", line 1, in <module>

    myname(追踪信息结束)

NameError(异常类): name ‘myname‘ is not defined(异常值)

 

以上是关于python上下文管理协议,即with的详细使用的主要内容,如果未能解决你的问题,请参考以下文章

python 面向对象编程 之 上下文管理协议

8.python之上下文管理协议

如何用python 中with 用法

python中的__enter__ __exit__

Python全栈day28(上下文管理)

Python中with用法详解