С 3.3, contextlib.ExitStack
теперь доступно для таких ситуаций, как эта.Вот пример кода из contextlib
документации:
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filenames]
# All opened files will automatically be closed at the end of
# the with statement, even if attempts to open files later
# in the list raise an exception
2.7 пользователям не повезло.Еще одна причина для обновления.