我想执行一个函数,如果结果是None或者引发了异常,我想做点什么。另外,如果提出异常,我想在完成后重新提起它。
以下代码有效,但它看起来不是正确的解决方案,我没有找到任何关于在raise
块中使用裸finally
的文档。这里有什么正确的解决方案?
exception_caught = False
try:
result = func()
except:
result = None
exception_caught = True
finally:
if result is None:
handle_none_or_exception()
if exception_caught:
raise
更新:我知道可以通过不止一次调用handle_none_or_exception()
来完成,但我不想这样做,因为它实际上是一个我不想改变或复制的代码片段。
答案 0 :(得分:2)
我认为您根本不需要finally
条款 - 您可以在result
内检查else
是否为无:
try:
result = func()
except:
handle_none_or_exception()
raise
else:
if result is None:
handle_none_or_exception()
答案 1 :(得分:0)
finally
部分是执行的清理部分,无论try-except
部分发生了什么。
在您的情况下,您有几个disctint情况(错误,没有错误和无值,没有错误,没有None值)。这就是为什么finally
阻止不适合该任务的原因,我想这是你的评论的结果" 它看起来不是正确的解决方案 "
文档中有一个提示(" try语句"),这使得无法提升:
在此期间,程序无法使用例外信息 执行finally子句。