作用:处理异常或进行资源清理等工作,让代码更加简练。
基本格式:with statement as statement:
do somthing.......
statement会有一个返回对象,这个返回对象必须有__enter__()和__exit__()方法,下面是这样的一个对象示例:
class Sample:
def __enter__(self):
print "In __enter__()"
return "Foo"
def __exit__(self, type,value, trace):
print "In __exit__()"
def get_sample():
return Sample()
with get_sample() as sample:
print "sample:",sample
运行上面代码输出如下:
In __enter__()
sample: Foo
In __exit__()
with语句执行过程是这样:
1. 返回对象的__enter__()方法被调用,这个方法的返回值将赋予个as后面的变量。
2. with后面的代码块(do something)执行完毕后,将调用返回对象的__exit__()方法。
3. 如果wiht语句后面的代码块抛出异常,__exit__()方法将被执行,__exit__()方法中的参数type,value,trace等可以打印出异常的相关属性。