with语句也可以进行预定义的清理操作,无论资源在使用过程中是否发现了异常,都会执行释放资源的操作。
格式:with 上下文表达式 【as 对象】;
- 上下文表达式返回上下文管理器对象
- 指定as后不赋值给对象,而是将上下文管理器的__enter __()方法的返回值赋值给对象
- 执行对对象的操作前,会调用上下文管理器的__enter __()方法,执行操作后调用__exit __()
with open('./file001.txt',encoding='UTF-8') as file:
file.read()
当对文件的操作结束后,with语句关闭文件
上下文管理器,包括__enter__(self)和__exit__(self,type,value,tb)两个方法,type为异常类型,value为是否无异常,tb为追踪信息
- 执行上下文表达式时,生产一个上下文管理器对象
- 调用__enter__()方法,指定as后,将返回值赋值给资源对象
- 执行with语句的代码块
- 执行__exit__()
- 无异常以None作为__exit__()的参数,有异常以异常信息作为参数
- exit()返回True为无异常,False为有异常会重新抛出异常,让with语句之外的语句处理