我在 python 中使用with statement
(PEP 343)在上下文之后自动管理资源清理时遇到了一些问题。特别是,with statement
总是假定资源清理方法是.close()
. 以下代码块中的 IE 会在browser.close()
执行超出上下文时自动被调用,但是,browser.close()
它不是正确的清理,因为它只关闭当前窗口而不是整个浏览器。它应该做的是调用browser.quit()
.
with contextlib.closing(webdriver.Firefox()) as browser:
# do something with browser
# at this point browser.close() has been called.
不幸的是,contextlib.closing
没有提供自定义要调用的清理方法名称的方法,如下所示:
def __exit__(self, *exc_info):
self.thing.close()
但是,我确实注意到有一个参数exec_info
,但没有在该特定方法中使用。有人知道为什么吗?
更大的问题是,如标题所示,如果可能的话,如何让 self.thing 调用任意清理方法?如果没有,最好的解决方法是什么?我应该回退使用try...finally
吗?