0
當我在上下文管理器中引發任何異常時,清理代碼未運行。例如:Python上下文管理器未清理
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 /除了正確捕捉異常,而有說法沒有。 有什麼我不明白如何與聲明應該工作?
你可以看到這裏提琴代碼:http://pythonfiddle.com/context-manager-failing
僅供參考我在OSX小牛運行Python 2.7版。儘管我已經能夠在很多環境中進行復制,但我懷疑這與它有很大關係。
這在['contextmanager'](https://docs.python.org/2/library/contextlib.html#contextlib.contextmanager)文檔中有詳細說明。整個最後一段描述了它是如何工作的,告訴你如何使用'try /'except'或'try' /'finally'等。 – abarnert 2014-11-21 22:44:57