with上下文管理器

contextlib模块中包含的工具用于处理上下文管理器和with语句

上下文管理器由with语句启用,执行流进入with中的代码块会运行__enter__()方法,它返回在这个上下文中使用的一个对象,执行流离开with块时,则执行上下文管理的__exit__(exc_type,exc_val,exc_tb)方法,如没有发生异常,这三个参数都为None,否则,它们包含与控制流离开上下文的异常相关类型、值、和跟踪信息,例如自定义一个上下文管理

class Context:
    def __init__(self):
        print('__init__')
    def __enter__(self):
        print('__enter__')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('__exit__')
        # print('exc_type:{},exc_val:{},exc_tb{}'.format(exc_type,exc_val,exc_tb))

with Context() as c:
    print('doing work in context')
    # print(1+'1')

#没有报错输出:
__init__
__enter__
doing work in context
__exit__
报错的输出:
class Context:
    def __init__(self):
        print('__init__')
    def __enter__(self):
        print('__enter__')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('__exit__')
        print('exc_type:{},exc_val:{},exc_tb{}'.format(exc_type,exc_val,exc_tb))

with Context() as c:
    print('doing work in context')
    print(1+'1')



__init__
Traceback (most recent call last):
__enter__
doing work in context
  File "D:/python_project/Python之路/day01/上下文管理器.py", line 13, in <module>
__exit__
exc_type:<class 'TypeError'>,exc_val:unsupported operand type(s) for +: 'int' and 'str',exc_tb<traceback object at 0x00000273A4997388>
    print(1+'1')
TypeError: unsupported operand type(s) for +: 'int' and 'str'

 

posted @ 2019-03-31 21:58  superniao  阅读(120)  评论(0编辑  收藏  举报