使用with自动关闭资源

2018-11-04  本文已影响0人  叶田的学习笔记
with 表达式  [as 目标]:
    代码块
with open('test.txt', 'w') as f:
    f.write('test')

使用with语句能保证当写操作执行完毕后自动关闭文件。

with语句可以在代码块执行完毕后还原进入该代码块时的现场。包含有with语句的代码块的执行过程如下:
1、计算表达式的值,返回一个上下文管理器对象。
2、加载上下文管理器对象的__exit__()方法以备后用。
3、调用上下文管理器对象的__enter__()方法。
4、如果with语句中设置了目标对象,则将__enter__()方法的返回值赋值给目标对象。
5、执行with中的代码块。
6、如果步骤5中代码正常结束,调用上下文管理器对象的__exit__()方法,其返回值直接忽略。
7、如果步骤5中代码执行过程中发生异常,调用上下文管理器对象的__exit__()方法,并将异常类型、值及traceback信息作为参数传递给__exit__()方法。如果__exit__()返回值为false,则异常会被重新抛出;如果其返回值为true,异常被挂起,程序继续执行。

上下文管理器对象:
它定义程序运行时需要建立的上下文,处理程序的进入和退出,实现了上下文管理协议,即在对象中定义__enter__()和__exit__()方法。

上下文管理器主要作用于资源共享,因此在实际应用中__enter__()和__exit__()方法基本用于资源分配以及释放相关的工作,如打开/关闭文件、异常处理、断开流的连接、锁分配等。

上一篇下一篇

猜你喜欢

热点阅读