zoukankan      html  css  js  c++  java
  • 上下文协议管理

    with obj as f:
    '代码块'

    1.with obj ----》触发obj.__enter__(),拿到返回值

    2.as f----->f=返回值、

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

    4.执行代码块
    一:没有异常的情况下,整个代码块运行完毕后去触发__exit__,它的三个参数都为None
    二:有异常的情况下,从异常出现的位置直接触发__exit__
    a:如果__exit__的返回值为True,代表吞掉了异常
    b:如果__exit__的返回值不为True,代表吐出了异常
    c:__exit__的的运行完毕就代表了整个with语句的执行完毕

    class Foo:
        def __init__(self,name):
            self.name=name
    
        def __enter__(self):
            print('执行enter')
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('执行exit')
            print(exc_type)
            print(exc_val)
            print(exc_tb)
            return True
    with Foo('a.txt') as f:
        print(f)
        print(asdfsaasdfasdfasdfasdfasfasdfasdfasdfasdfasfdasfd)  #触发__exit__
        print(f.name)
        print('-----------------')
        print('-----------------')
        print('-----------------')
        print('-----------------')
        print('-----------------')
        print('-----------------')
        print('-----------------')
    print('000000000000000000000000000000000000000000000')
  • 相关阅读:
    2013年元旦新年好
    2012第52周三阴雨
    2013第1周四雪
    2013年元旦新年好
    2013第1周三阴冷
    2012第52周日晴冷
    2012周六补记
    PHP怎么调用其他类的方法
    面向对象复习笔记(一)
    Laravel 引入自定义类库或第三方类库
  • 原文地址:https://www.cnblogs.com/jiawen010/p/10144221.html
Copyright © 2011-2022 走看看