• with-as 语句


    with-as语句又成为上下文管理协议,其结构如下:

    with expression [as variable]:
        with-block
    

    with 所求值的对象,即 expression 表达式所得到的对象必须有一个 __enter__() 方法和一个 __exit__() 方法。

    with-as语句执行流程:

    1)首先执行返回对象的 __enter__ 函数,它的返回值会赋给 as 后面的 variable 变量,如果不写as variable,返回值会被忽略。

    2)开始执行 with-block 中的语句。

    3)不论步骤2)执行成功还是失败,最后都会执行对象的__exit__函数。__exit__函数的返回值用来指示 with-block 部分发生的异

       常是否要 re-raise,如果返回 False,则会 re-raise with-block 的异常,如果返回 True,则就像什么都没发生。

    搞懂了 with 语句的执行流程,我们知道:为了让一个对象兼容 with 语句,我们需要实现 __enter__() 和 __exit__() 方法。

    接下来我们来自定义一个可以用 with 语句来管理的类型。

    class test(object):
        def __enter__(self):
            print("call __enter__")
            return 1
    
        def __exit__(self,*args):
            print("call __exit__")
            return True    # 改为False则会报出异常
    
    with test() as t:
        print("t is {0}".format(t))
        raise NameError("Hi there")
    

    with-as 语句常用于打开文件当中,因为文件对象也实现了__enter__和__exit__这两个函数,所以可以用with来管理。

  • 相关阅读:
    项目工作总结 (转)
    mysql-笔记 操作语句
    QTP自动化测试-excel sheet页数量过多--但是不能在qtp里被识别
    mysql-笔记 定义语句
    HDU
    CodeForces
    CodeForces
    CodeForces
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/yanghh/p/13182917.html
Copyright © 2020-2023  润新知