Posted at

withブロックの中でreturnした場合の挙動

More than 5 years have passed since last update.

別に面白くもない確認。

with文のブロック内でreturnした場合にコンテキストマネージャの終了処理はちゃんと呼ばれるのか不安になって確かめた。

結論としては大丈夫。


withreturn.py

class Some(object):

def add(self, x, y):
return x + y

def close(self):
print "Closed"

from contextlib import closing
def foo(x):
with closing(Some()) as some:
return some.add(x, 10)

print foo(16)
# Closed
#=> 26


このように終了処理が呼ばれる。