Python 中的 goto 替代方案

-1 投票
1 回答
56 浏览
提问于 2025-04-14 18:07

假设我有一个函数,它分几个步骤来完成一些工作。在每个步骤之间,我想决定是继续执行后面的步骤,还是跳过剩下的步骤。工作完成后,我希望有一段代码总是能被执行。我知道可以用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 也可以是一个错误信息,而不仅仅是一个真假值。

撰写回答