为了弄清楚避免递归需要什么,我需要捕获任何异常(编辑:不仅仅是从异常派生的异常,而是所有异常,包括 KeyboardInterrupt 和用户异常),将其放入一个变量中,然后重新引发它在 catch 块之外。本质上,我正在尝试推出自己的 finally 块。这可能吗?
实际问题是调用多个清理函数,如果其中任何一个失败,也应该调用所有其他函数,那么失败的异常仍然应该传播。这是我当前的解决方案,它需要一个 Popen 对象列表:
def cleanupProcs(procs):
if not procs:
return
proc = procs.pop(0)
try:
proc.terminate()
proc.wait()
finally:
cleanupProcs(procs)
有没有迭代的方法来做到这一点?更优雅的方式?更Python化的方式?
最佳答案
如果您希望堆栈跟踪包括:
try:
# something
except:
the_type, the_value, the_traceback = sys.exc_info()
后来 raise the_type, the_value, the_traceback
(与 ojita 相关)另请参阅 Python 2.7 的 this answer。
关于Python:捕获任何异常并将其放入变量中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19405917/