环境管理器

环境管理器
  类内有__enter__ 和 __exit__实例方法的类被称为环境管理器
  能够用with进行管理的对象必须是环境管理器

说明:
  __enter__将在进入with语句时被调用并返回由as变量绑定的对象
  __exit__将在离开with语句时被调用,且可以用参数来判断在离开with语句时是否有异常发生并做出相应的处理

class A:

    def __enter__(self):
        print("此方法是在with语句内执行的")

    def __exit__(self, exc_type, exc_val, exc_tb):
        '''exc_type  用来绑定错误类型,当没有异常发生是绑定None
          exc_val   用来绑定错误对象,当没有发生异常时绑定None
           exc_tb    用来绑定traceback对象,当没有异常时绑定None
        '''
        if exc_type == None:
            print("你已离开with语句,离开时没有任何异常")
        else:
            print("你已离开with语句,发生异常")
            print("绑定错误对象是",exc_val)


with A() as a:
    print("这是with语句内部的输出")
    print(int(input("请输入一个整数")))

print("程序正常结束")

输出结果:
tarena@tedu:~/zengsf/828$ python3 exercise828.py 
此方法是在with语句内执行的
这是with语句内部的输出
请输入一个整数f
你已离开with语句,发生异常
绑定错误对象是 invalid literal for int() with base 10: 'f'
Traceback (most recent call last):
  File "exercise828.py", line 20, in <module>
    print(int(input("请输入一个整数")))
ValueError: invalid literal for int() with base 10: 'f'

 

posted on 2018-08-29 22:27  zengsf  阅读(360)  评论(0编辑  收藏  举报

导航