with后面返回的对象要求必须有这两个方法,而文件对象f刚好是有这两个方法的。
object.__enter__(self)
进入与此对象相关的运行时上下文。with语句将将此方法的返回值绑定到语句的AS子句中指定的目标(如果有设置的话)
object.__exit__(self, exc_type, exc_value, traceback)
退出与此对象相关的运行时上下文。参数描述导致上下文退出的异常。如果上下文运行时没有异常发生,那么三个参数都将置为None。
如果有异常发生,并且该方法希望抑制异常(即阻止它被传播),则它应该返回True。否则,异常将在退出该方法时正常处理。
注意:
__exit__()
方法不应该重新抛出传入的异常,这是调用者的职责。
下面,以3个实例讲解:
1、无异常情况:
‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
class Test:
def enter(self):
print(‘enter() is call!’)
return self
def dosomething(self):
print(‘dosomethong!’)
def exit(self, exc_type, exc_value, traceback):
print(‘exit() is call!’)
print(f’type:{exc_type}')
print(f’value:{exc_value}')
print(f’trace:{traceback}')
print(‘exit() is call!’)
with Test() as sample:
sample.dosomething()
enter() is call!