python with 语句

来源:互联网 发布:适合男生用的面膜知乎 编辑:程序博客网 时间:2024/06/05 22:49

reference release 2.7 official document


with语句上下文管理器:

上下文管理器是一种在执行一个with语句的时候定义运行期上下文如何被建立的对象。这个上下文管理器控制着代码块的执行:进入,离开和期望的运行期上下文。上下文管理器通常在使用with语句的时候被调用,但也可以直接调用该对象的方法。

上下文管理器的典型用法:保存和恢复各种全局状态,加锁和解锁资源,关闭打开的文件等。

object.__enter__(self)
    进入跟该对象相关联的运行期上下文。with语句将绑定这个方法,将其返回值赋给as从句的变量。

object.__exit__(self,exc_type,exe_value,traceback)
    离开跟该对象相关联的运行期上下文。如果是由于异常导致离开上下文,则这些参数描述的是该异常,反之这些参数为None。如果产生了这样的一个异常,该方法希望屏蔽该异常,那么它应该返回一个正确的值。否则,这个异常将会被向上抛出。


with语句
    with语句通常使用上下文管理器来封装执行代码块。这种使用方法比try...except...finally更方便易用。

with_stmt ::=  "with" with_item ("," with_item)* ":" suite
with_item ::=  expression ["as" target]

只有一个with_item的执行流程如下:
1.计算上下文表达式(with_item中给出)产生一个上下文管理器
2.加载上下文管理器的__exit__方法
3.调用上下文管理器的__enter__方法
4.如果as从句中给出目标变量,则__enter__返回值将赋给该变量。
5.with的suite被执行。
6.调用上下文管理器的__exit__()方法。如果suite中发生异常,则该异常的类型,值,和traceback被传递到__exit__的参数中。否则,参数为None.
   如果suite是由于产生异常退出的,而且exit方法返回false,这个异常将被重新抛出,如果返回true,这个异常则被屏蔽,with语句下面的语句得以继续执行。
   如果suite是由于其他原因退出的,则__exit__方法的返回值将会被忽略。



示例:

with open('/tmp/workfile', 'r') as f:     read_data = f.read()



原创粉丝点击