2017-06-14 24 views
-1

我有一個場景,我在一組操作後調用特定的代碼塊。我在Python中使用了go-tolabel。它按預期工作。如何解決python中的go-to?

有沒有其他更好的選擇呢?

這是使用Squish-for-QT進行自動化的Python代碼。

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 
+0

可能的重複[是否有Python中的標籤/轉到?](https://stackoverflow.com/questions/438844/is-there-a-label-goto-in-python) – Makoto

+2

_「它的工作原理預計。「_ - 它呢? Python不支持goto的本地支持。你在用圖書館嗎? –

+0

是的,它的工作。我使用了「entrian go-to」庫。現在,我編輯了代碼以使用「wphicks」建議的「while True」解決方案 –

回答

1

在這種特殊情況下,在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不符合,我們會陷入其他問題。

如果obj1存在,我們等待obj1,否則,我們打破了真正的循環。

等待obj1後,我們繼續運行Function1(a,b,c),同時Screen1可見,然後返回到True循環的開始處(與原始goto一致)。

1

您可以定義上面的代碼到功能,並使用一些基本的遞歸像這樣

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() 

通常使用遞歸是比較常見的地方。希望這有助於

+1

這將最終溢出堆棧,如果它多次觸發遞歸調用,並且我認爲您可能已經獲得了縮進錯誤最後'else'。 – user2357112

+0

是的,我做了編輯 –

+0

如果'object.exists(「obj1」)'測試false,並且在Screen1.visible'測試錯誤時重新進入外部循環,那麼問題中的代碼就會從循環中流出。你的代碼有相反的行爲。 – user2357112