Python中的try/finally流控制

5 投票
6 回答
1556 浏览
提问于 2025-04-16 02:52

我相信这个概念以前一定有人提到过,但我找不到一个简单明了的答案。使用try/finally来处理有多个返回值的函数,是不是一种不好的做法呢?比如我有


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

这样做似乎比把update()命令存储在一个临时变量里再返回要好看一些。

6 个回答

3

我觉得你是想用try/finally来替代这个:

if x:
    result = update(1)
else:
    result = update(2)
notifyUpdated()
return result

我想这其实是个人风格的问题。对我来说,我喜欢把try用来处理一些特殊情况。我不会把它当作控制程序流程的语句来用。

11

我不会在没有异常的情况下使用try/finally。这种用法太复杂了,不太好。

这样做会更好:

if x:
    ret = update(1)
else:
    ret = update(2)
notifyUpdated()
return ret
11

我不太推荐这样做。首先,因为无论代码的哪个部分出错,notifyUpdated() 都会被调用。你需要像下面这样写,才能实现你想要的效果:

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

其次,try 代码块通常是用来处理错误的,但在这里你并不是在处理错误,只是为了方便而使用它。所以这样写会让人感到困惑。

举个例子,我觉得前面回答你问题的两个人(至少有一个人已经删除了他们的回答)并没有真正理解你想要做的事情。代码如果让人困惑,那就不好,不管它看起来多么方便和聪明。

撰写回答