您的位置:首页 > 编程语言 > Python开发

python上下文管理协议

2018-03-22 22:34 399 查看
当使用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=name

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
with Foo('a.txt') as f:
print(f)    # 为__enter__()的返回值
print(asdfsaasdfasdfasdfasdfasfasdfasdfasdfasdfasfdasfd)  #触发__exit__
print(f.name)
print('-----------------')
print('-----------------')
print('000000000000000000000000000000000000000000000')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: