【问题标题】:Can we return after raise statement我们可以在 raise 声明后返回吗
【发布时间】:2016-11-04 05:52:00
【问题描述】:

我需要在 raise 语句后返回 True Value。在这里,我需要提出声明,并且它应该返回 True 值。如果我使用 finally 语句,它不会引发异常块,如果我不使用 finally,那么异常块将使用 raise 语句执行,之后我将无法使用 retcodecmd 变量。在我的python代码下面:

try:
    something....
except ValueError:
    self._retcodecmd = True
    raise SomeException(something)
finally:
    if self._retcodecmd is True:
        return True
    else:
        return False

【问题讨论】:

    标签: python python-2.7 exception-handling


    【解决方案1】:

    从函数中返回和冒泡异常是互斥的。 raisereturn 退出一个函数是没有意义的,你必须选择。

    这里的finally 块将强制return,撤消您提出的异常。如果这不是您想要的,您需要让异常传播而不在 finally 块中被覆盖,并了解如何在调用者中适当地处理异常。

    【讨论】:

    • 所以对于这种情况的任何替代方案,我需要引发错误以及在引发错误后我需要执行一些其他功能。
    • @PranjayKaparuwan:也许你的返回值太受限制了?您不能raisereturn,但您可以返回多个值,其中第一个与您当前使用的相同,第二个指示是否出现异常return True, sys.exc_info() == (None, None, None) 或类似但更适合的东西到上下文。但从根本上说,在我所知道的每一种语言中,异常和返回都是相互排斥的。如果您遵循异常路径,则无法在不取消异常传播的情况下遵循返回路径,反之亦然。
    • @PranjayKaparuwan> 不要在您的return 子句中使用finally。然后当你引发错误时,finally 子句将运行,之后你的错误将被引发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2020-07-27
    相关资源
    最近更新 更多