python try/finally用于流控制

Fal*_*rri 5 python flow-control try-catch-finally

我确信这个概念已经出现过,但我找不到一个好的,简单的答案.使用try/finally是一种处理多个返回函数的坏方法吗?比如我有


try:
    if x:
        return update(1)
    else:
        return update(2)
finally:
    notifyUpdated()

这似乎比在临时变量中存储update()命令并返回它更好.

Omn*_*ous 11

我不推荐它.首先是因为notifyUpdated()即使任一分支中的代码抛出异常也会被调用.你需要这样的东西来真正得到预期的行为:

try:
    if x:
        return update(1)
    else:
        return update(2)
except:
    raise
else:
    notifyUpdated()
Run Code Online (Sandbox Code Playgroud)

其次,因为try块通常表示你正在做某种异常处理,而你不是,你只是为了方便而使用它们.所以这个结构会让人感到困惑.

例如,我不认为前两个人中的任何一个(至少有一个人删除了他们的答案)回答你的问题,意识到你真正想要做的事情.令人困惑的代码很糟糕,无论它看起来多么方便和聪明.


Ned*_*der 11

我不会将try/finally用于不涉及异常的流.这对自己的好处来说太棘手了.

这个更好:

if x:
    ret = update(1)
else:
    ret = update(2)
notifyUpdated()
return ret
Run Code Online (Sandbox Code Playgroud)