Python “with” keyword
with 关键字的意思就是一种try finally的快捷写法
看下面的代码和注释就容易理解
with WithWrapper() as ww:
print ww # 应该打印 1. 它是WithWrapper().__enter__函数的返回值
print "with body"
raise NameError("Error Raised") # 这里如果有异常, WithWrapper().__exit__函数的后三个参数就根据这个异常被赋值。否则三个参数的值都是None
class WithWrapper:
def __enter__(self):
print "with语句执行后,__enter__先执行"
return 1 # 返回的值被赋给with语句中as后的变量,你想返回什么就返回什么
def __exit__(self, exc_type, exc_value, traceback):
print "with语句执行后,__exit__一定会被执行,即使在with body里面抛出了异常"
return True # 返回True表示with body抛出的异常本地处理了,异常不会被propagated。否则异常会被with语句后面的代码捕捉到。
可参考
浙公网安备 33010602011771号