码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-11 02:42:58      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:部分   清理   __enter__   组成   self   需要   fine   post   recent   

一、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的详细使用

标签:部分   清理   __enter__   组成   self   需要   fine   post   recent   

原文地址:https://www.cnblogs.com/ekuj/p/8542836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!