如何解决 python 中的 go-to?

how to work around go-to in python?

我有一个场景,我在一组操作后调用了特定的代码块。我在 Python 中使用了 go-tolabel。它按预期工作。

还有其他更好的选择吗?

这是 Python 使用 Squish-for-QT 的自动化代码。

label .mylabel 

while (cond1):
        print("inside cond1")
        Function1(x,y,z)
else:
    if (object.exists("obj1")):
        Screen1 = waitForObject("obj1")
        print ("Inside Screen1")

        while (Screen1.visible):
            Function1(a,b,c)
        else:
            goto .mylabel 

您可以将上面的代码定义到一个函数中,并像这样使用一些基本的递归

def action():
    while (cond1):
        print("inside cond1")
        Function1(x,y,z)
    else:
        if (object.exists("obj1")):
            Screen1 = waitForObject("obj1")
            print ("Inside Screen1")

            while (Screen1.visible):
                Function1(a,b,c)
            else:
                action()

一般使用递归是比较常见的地方。希望这有帮助

在这种特殊情况下,将整个事物包装在 while True 中将实现相同的行为:

while True:
    while (cond1):
            print("inside cond1")
            Function1(x,y,z)
    else:
        if (object.exists("obj1")):
            Screen1 = waitForObject("obj1")
            print ("Inside Screen1")

            while (Screen1.visible):
                Function1(a,b,c)
        else:
            break

逐个检查此分支:

如果cond1满足,我们继续执行Function1(x, y, z)

一旦cond1不满足,就陷入else

如果 obj1 存在,我们等待 obj1,否则,我们跳出 while True 循环。

等到obj1后,我们继续运行Function1(a,b,c) while Screen1可见,然后回到while True循环的开头(和原来的goto一致) .