环境管理器
类内有__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'