赞
踩
目录
1、适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”工作。
2、释放资源:文件使用之后关闭、线程中的锁自动获取、释放。
- # 引入魔法函数:__enter__ __exit__
- class Myclass:
- def __enter__(self):
- print('__enter__ is call!')
- return self
- def process1(self):
- print('process1')
- def process2(self):
- a = 1/0
- print('process2')
- def __exit__(self,exc_type,exc_value,traceback):
- print('__exit__ is call!')
- print(f'type:{exc_type}')
- print(f'value:{exc_value}')
- print(f'trace:{traceback}')
如果是直接调用自定义的类,必然会报错。
- mm = Myclass()
- mm.process2()
- # ZeroDivisionError: division by zero
如果使用with语句调用自定义的类:
- with Myclass() as mc:
- mc.process1()
- mc.process2()
会有如下的提示信息:
- """
- __enter__ is call!
- process1
- __exit__ is call!
- type:<class 'ZeroDivisionError'>
- value:division by zero
- trace:<traceback object at 0x0000027C8DF8ACC8>
- """
无论执行过程中是否异常抛出,都会继续执行下面的程序。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。