当我在上下文管理器中引发任何异常时,清理代码不会运行。例如:
from contextlib import contextmanager
try:
raise BaseException()
except BaseException:
print "bye from except"
@contextmanager
def say_goodbye():
yield
print "bye from context manager"
with say_goodbye():
raise BaseException()
将输出:
bye from except
Traceback (most recent call last):
File "", line 15, in
BaseException
请注意,try/except 正确地捕获了异常,而 with 语句没有。关于 with 语句应该如何工作,我有什么不明白的地方吗?
您可以在此处查看小提琴中的代码:http: //pythonfiddle.com/context-manager-failing
仅供参考,我在 OSX mavericks 上运行 python 2.7。虽然我已经能够在许多环境中复制,但我怀疑这与它有多大关系。