上下文管理协议"/>
python上下文管理协议
当使用with时,会产生上下文管理协议,主要是enter(), exit()方法起作用
with obj as f:
‘代码块’
1.with obj —-》触发obj.enter(),拿到返回值
2.as f—–>f=返回值、
3.with obj as f 等同于 f=obj.enter()
4.执行代码块
一:没有异常的情况下,整个代码块运行完毕后去触发exit,它的三个参数都为None
二:有异常的情况下,从异常出现的位置直接触发exit
a:如果exit的返回值为True,代表吞掉了异常
b:如果exit的返回值不为True,代表吐出了异常
c:exit的的运行完毕就代表了整个with语句的执行完毕
class Foo:def __init__(self,name):self.name=namedef __enter__(self):print('执行enter')return selfdef __exit__(self, exc_type, exc_val, exc_tb):print('执行exit')print(exc_type)print(exc_val)print(exc_tb)return True
with Foo('a.txt') as f:print(f) # 为__enter__()的返回值print(asdfsaasdfasdfasdfasdfasfasdfasdfasdfasdfasfdasfd) #触发__exit__print(f.name)print('-----------------')print('-----------------')
print('000000000000000000000000000000000000000000000')
更多推荐
python上下文管理协议
发布评论