Python类:上下文管理协议

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)
print(asdfsaasdfasdfasdfasdfasfasdfasdfasdfasdfasfdasfd) #触发__exit__
print(f.name)
print('-----------------')
print('-----------------')
print('-----------------')
print('-----------------')
print('-----------------')
print('-----------------')
print('-----------------')
print('000000000000000000000000000000000000000000000')
----------------------------------------

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语句的执行完毕

 
posted on 2018-01-24 21:21 思南1900 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/sinan1900/p/8343612.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值