我有点像python新手,但我正在python中实现一个基准测试工具,例如,该工具将创建几个相互依赖的资源集。当程序超出范围时,我希望按正确的顺序清理资源。
我来自C++背景,在C++中,我知道我可以用RAII(构造函数、析构函数(做到这一点。
这个问题的模式中的等效模式是什么?有没有一种方法可以在python中进行RAII,或者有更好的方法来解决这个问题?
您可能正在寻找一个上下文管理器,它是一个可以在with
语句中使用的对象:
with context() as c:
do_something(c)
当输入with
语句时,将计算表达式(在本例中为context()
(,并应返回上下文管理器。__enter__()
将在上下文管理器上被调用,结果(可能与上下文管理器是同一对象,也可能不是同一对象(被分配给用as
指定的变量。无论控件如何退出with
主体,都将在上下文管理器上调用__exit__()
,并使用指定是否引发异常的参数。
例如:内置的open()
应该以这种方式使用,以便在与打开的文件交互后关闭它
使用contextlib可以很容易地定义新的上下文管理器类型。
对于更一次性的解决方案,您可以使用try
/finally
:finally
块在try
块之后执行,无论控制如何退出try
块:
try:
do_something()
finally:
cleanup()