我们能在raise语句后返回吗?

9

我需要在raise语句后返回True值。这里我需要使用raise语句并返回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
1个回答

18

抛出异常和从函数中返回值是互相排斥的。通过同时使用raisereturn来退出一个函数是毫无意义的,你必须做出选择。

这里的finally块会强制执行return语句,取消你引发的异常。如果这不是你想要的结果,你需要让异常继续传播而不被finally块覆盖,并且理解在调用者中如何适当地处理异常。


有没有其他的解决方案,可以在引发错误后执行其他函数? - Pranjay Kaparuwan
1
@PranjayKaparuwan:也许你的返回值太受限制了?你不能raisereturn,但是你可以返回多个值,其中第一个与你当前使用的相同,第二个指示是否出现异常return True, sys.exc_info() == (None, None, None)或类似但更适合上下文的内容。但从根本上讲,在我所知道的每种语言中,异常和返回是互斥的。如果你遵循异常路径,你就不能在不取消异常传播的情况下遵循返回路径,反之亦然。 - ShadowRanger
@PranjayKaparuwan> 不要在finally子句中使用return。当您引发错误时,finally子句将运行,然后再引发您的错误。 - spectras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接