別に面白くもない確認。
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
このように終了処理が呼ばれる。