Python中的try/finally流控制
我相信这个概念以前一定有人提到过,但我找不到一个简单明了的答案。使用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
代码块通常是用来处理错误的,但在这里你并不是在处理错误,只是为了方便而使用它。所以这样写会让人感到困惑。
举个例子,我觉得前面回答你问题的两个人(至少有一个人已经删除了他们的回答)并没有真正理解你想要做的事情。代码如果让人困惑,那就不好,不管它看起来多么方便和聪明。