zoukankan      html  css  js  c++  java
  • 【Python学习之旅】---上下文管理协议

    # 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 Open:
    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 Open('a.txt') as f: #执行with open会触发__enter__,返回的self赋值给f
    print(f)
    print(frggggffgfg) #如果运行不存在的属性,直接触发__exit__运行,如果有返回True,异常直接被吞掉
    print(f.name)
    print('000000000000000000000000') #继续运行


    #执行结果:

    执行enter
    <__main__.Open object at 0x0000016A045F7A58>
    执行exit
    <class 'NameError'>
    name 'frggggffgfg' is not defined
    <traceback object at 0x0000016A04613388>
    000000000000000000000000

  • 相关阅读:
    搭建高可用mongodb集群—— 副本集
    搭建高可用mongodb集群(一)——mongodb配置主从模式
    单线程异步回调机制的缺陷与node的解决方案
    js实现接口的几种方式
    访问者模式和php实现
    策略模式和php实现
    状态模式和php实现
    观察者模式和php实现
    C语言之一般树
    电子相册之bitmap
  • 原文地址:https://www.cnblogs.com/chenyuxia/p/12183209.html
Copyright © 2011-2022 走看看