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

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

        代码块

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

    as  f ----------->f = 返回值

    执行代码块:

    一:没有异常的情况下,整个代码块运行完毕后去触发__excit__,它的三个参数都为None

    二:有异常的情况下,从异常出现的文职直接触发__exit__,

      a:如果__exit__的返回值为True,代表吞掉异常

      b :如果__exit__的返回值不为True,代表吐出了异常

      c:__exit__的运行完毕就代表了整个with语句的执行完毕 

     1 # f = open('aaa.txt', 'w')  # 相当于为open类创建一个实例对象f,此时f实例就加载到内存中
     2 # f.close()  # 调用close()就可以关闭文件,清理垃圾。
     3 class Open:
     4     def __init__(self, name):
     5         self.name = name
     6 
     7     def __enter__(self):
     8         print('执行enter方法')
     9         return self
    10 
    11     def __exit__(self, exc_type, exc_val, exc_tb):  # exc_type异常信息的类,exc_val异常的值,exc_tb异常的追踪信息
    12         print('执行exit方法')  # val value   tb  traceback
    13         print(exc_tb)
    14         print(exc_type)
    15         print(exc_val)
    16         # return True   # 把异常直接吞掉
    17 
    18 
    19 # print(Open('s'))
    20 with Open('aaa.txt') as f:  # with Open('aaa.txt') 触发__enter__方法
    21     print(f.name)
    22     print('======>')
    23     print('======>')
    24     print('======>')
    25     print(sdkfjklsdjf)
    26 print('00000000000000000000000000000')
    27 输出:
    28 执行enter方法
    29 aaa.txt
    30 ======>
    31 ======>
    32 ======>
    33 执行exit方法
    34 <traceback object at 0x00811EA8>
    35 <class 'NameError'>
    36 name 'sdkfjklsdjf' is not defined
    37 Traceback (most recent call last):
    38   File "C:/Users/Administrator/Desktop/python/3月10日/上下文管理协议.py", line 25, in <module>
    39     print(sdkfjklsdjf)
    40 NameError: name 'sdkfjklsdjf' is not defined
  • 相关阅读:
    Android 图片处理之 Fresco
    Android数据列表展示之 RecylerView
    新浪微博第二天
    Android之MVP设计模式
    android中fragment与activity之间通信原理以及例子
    SpannableString设置文本背景色
    新浪微博应用第一天
    python D11 迭代及闭包
    python D10 函数进阶
    python D9 初识函数
  • 原文地址:https://www.cnblogs.com/ch2020/p/12463723.html
Copyright © 2011-2022 走看看