1. with关键字可以使用的地方?
解释:
1. 只有实现 __enter__() ,__exit__()方法的才能使用。
2. with的好处?
解释:
1.基本上网上都已经说了
2.主要是
3. 在类方法中自定义实现
1.啰嗦一遍,网上都已有的内容:
在__enter__() 方法中如果有返回上下文管理器时,我们会把它赋值给 as 后面的语句;在__exit__()方法中,如果我们返回的值为 True就忽略错误处理,相反就重新抛出。
2.当我们以类实现时,如果使用with(实现了 enter、exit方法)关键字,当我们的类实例方法报错时,会自动的被__exit__()方法捕捉到,**同时会退出**。
class Sample:
def __enter__(self):
return self
def __exit__(self, type, value, trace):
print("退出 type:", type)
print("值 value:", value)
print("问题 trace:", trace)
return False
def do_something(self):
print('do_something')
bar = 1 / 0
return bar + 10
def do_something_2(self):
print('do_something_2')
bar = 1 / 0
return bar + 10
with Sample() as sample:
sample.do_something()# 此时报错就会退出,无论__exit__()是否返回True/False
sample.do_something_2()
执行结果
网友评论