Python中If/Elif语句的“Finally”等价物

2024-10-01 02:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

Python对于其if/else语句是否有一个finally等价物,类似于其try/except/finally语句?我们可以简化这一点:

 if condition1:
      do stuff
      clean up
 elif condition2:
      do stuff
      clean up
 elif condition3:
      do stuff
      clean up
 ...
 ...

对此:

 if condition1:
      do stuff
 elif condition2:
      do stuff
 elif condition3:
      do stuff
 ...
 ...
 finally:
      clean up

其中finally只有在满足条件并运行其“do stuff”之后才会调用?相反,如果不满足任何条件,则finally代码将不会运行。

我不喜欢说亵渎神明的话,但我能描述它的最好方式是在导致finally的每个“做事情”块的末尾都有一个GOTO语句。

本质上,它与else语句相反。虽然else仅在不满足其他条件时运行,但只有在满足其他条件时才会运行。


Tags: cleanif语句条件doelseuptry
3条回答

mhlester的答案有重复的代码,改进后的版本可能如下:

class NoCleanUp(Exception):
    pass

try:
    if condition1:
        do stuff
    elif condition2:
        do stuff
    else:
        raise NoCleanUp
except NoCleanUp:
    pass
else:
    cleanup

完全可以这样做:

def function(x,y,z):
    if condition1:
        blah
    elif condition2:
        blah2
    else:
        return False

    #finally!
    clean up stuff.

在某些方面,不太方便,因为你必须使用一个单独的功能。不过,好的做法是无论如何不要做太长的函数。将逻辑分为易于阅读的小函数(通常最多1页长)可以使测试、文档编制和理解执行流更加容易。

需要注意的一点是,finally子句在发生异常时不会运行。要做到这一点,还需要在其中添加try:内容。

你的逻辑类似于:

cleanup = True
if condition1:
    do stuff
elif condition2:
    do stuff
elif condition3:
    do stuff
....
else:
    cleanup = False

if cleanup:
    do the cleanup

丑,但这是你要的

相关问题 更多 >