Python 中的 goto 替代方案
假设我有一个函数,它分几个步骤来完成一些工作。在每个步骤之间,我想决定是继续执行后面的步骤,还是跳过剩下的步骤。工作完成后,我希望有一段代码总是能被执行。我知道可以用try加finally来实现这个目的,但这其实和错误没有关系,我也不想随便抛出假异常。目前我做的方式是用一个无限循环加上break语句,来实现类似goto的效果。我的问题是:有没有比这个更合适的方法呢?
# ugly goto hack
while True:
do_work()
if condition:
break
do_more_work()
if condition:
break
do_even_more_work()
if condition:
break
#....
break
do_some_final_work()
1 个回答
1
最简单的办法就是用嵌套的 if
语句,把条件反过来写。
do_work()
if not condition:
do_more_work()
if not condition:
do_even_more_work()
if not condition:
# ...
do_some_final_work()
为了避免像这样深层嵌套,你可以使用一个状态变量。我们在代码中使用以下模式,执行一系列步骤,直到发生某种失败。这种情况通常出现在进行一系列验证的时候。
error = False
# code that executes do_work() and sets error = True if it fails
if not error:
# code that executes do_more_work() and sets error = True if it fails
if not error:
# code that executes do_even_more_work() and sets error = True if it fails
# ...
do_some_final_work()
error
也可以是一个错误信息,而不仅仅是一个真假值。