为了弄清楚如何避免某些递归,我需要捕获任何异常(编辑:不仅是从 Exception 派生的异常,还有所有异常,包括 KeyboardInterrupt 和用户异常),将其放入变量中,然后重新引发它在 catch 块之外。本质上,我正在尝试推出自己的 finally 块。这可能吗?
实际的问题是调用许多清理函数,如果其中任何一个失败,则还应调用所有其他函数,那么失败的异常仍应传播。这是我当前的解决方案,它需要一个 Popen 对象列表:
def cleanupProcs(procs):
if not procs:
return
proc = procs.pop(0)
try:
proc.terminate()
proc.wait()
finally:
cleanupProcs(procs)
有没有迭代的方法来做到这一点?更优雅的方式?一种更 Pythonic 的方式?