为了弄清楚如何避免一些递归,我需要捕获任何异常(编辑:不仅仅是从 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的方式?
如果您希望包含堆栈跟踪:
try:
# something
except:
the_type, the_value, the_traceback = sys.exc_info()
later
raise the_type, the_value, the_traceback
(相关这个答案 https://stackoverflow.com/a/18188660/321973)
也可以看看here https://docs.python.org/2/library/sys.html#sys.exc_info对于 Python 2.7。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)