1.使用with语句结束后,会自动完成清理
2.在需要管理一些资源,比如文件,网络连接,锁的编程环境中,可以在__ exit __ 中定制自动释放资源的机制.
class Foo:
def __init__(self,name,type = 'r',encoding = 'utf-8'):
self.name = name
self.type = type
self.encoding = encoding
def __enter__(self):
print('enter执行啦')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit执行啦')
print(exc_type)
print(exc_val)
print(exc_tb)
return True #返回值为True,将吞掉异常,结束with语句,继续执行外面的代码.如果不是True,将吐出异常,结束执行.
with Foo('malin','r','utf-8') as f: #触发__enter__后获得返回值,赋值给f
print(f)
print(addddddd) #出现异常时触发__exit__
print('*'*20)
print('0'*20)
输出:
enter执行啦
<main.Foo object at 0x0000003AB18835C0>
exit执行啦
<class ‘NameError’>
name ‘addddddd’ is not defined
<traceback object at 0x0000003AB1880D08>
00000000000000000000