当前位置: 代码迷 >> python >> 最终块内裸露“提高”
  详细解决方案

最终块内裸露“提高”

热度:76   发布时间:2023-06-16 13:59:18.0

我想执行一个函数,如果结果为无或引发异常,我想做些事情。 另外,如果提出了例外,我想在结束后再提出。

以下代码可以工作,但是它看起来不像是正确的解决方案,而且我没有找到任何有关在finally块内使用裸raise文档。 这里正确的解决方案是什么?

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()调用handle_none_or_exception()来完成,但是我不想这样做,因为这实际上是我不想更改或重复的代码片段。

我认为您根本不需要finally子句-您可以在else内部检查result是否为None:

try:
    result = func()
except:
    handle_none_or_exception()
    raise
else:
    if result is None:
        handle_none_or_exception()

无论try-except部分发生了什么, finally部分都是执行的cleanup部分。

在您的情况下,您有几种情况(错误,无错误和无值,无错误且无值)。 这就是为什么finally块不适合该任务的原因,我想这是您的评论所提到的“ 它看起来不像是正确的解决方案 ”。

docs(“ try语句”)中有一个提示,使裸露不可能:

在执行finally子句期间,异常信息不可用于程序。

  相关解决方案