1.1 with语句的作用
with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
简单意思:可以不用手动close()关闭,可以自动释放资源
with open("new.txt") as f:
data = f.read()
print(data)
1.2 with语句工作原理
定义原则:with所求值的对象必须有一个__enter__()方法,一个__exit__()方法
执行步骤:
1.紧跟着with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法返回值将被赋值给as后面的变量。
2.当with后面的代码块全部被执行完后,将调用前面返回对象的__exit__()方法
class MyContentMgr:
def __enter__(self):
print("enter方法被调用执行了")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("exit方法被调用执行了")
def show(self):
print("show方法被调用执行了")
with MyContentMgr() as file:
file.show()
1.3 with语句自动处理异常
with真正强大之处是它可以处理异常,__exit__方法有三个参数,exc_type,exc_val,exc_tb,这些参数在异常处理中相当有效。
上面代码中,当调用show()函数报错依然不会影响__exit__方法自动调用