2013-07-24 502 views
0

我正在使用Sikuli OCR測試庫。在我的Python腳本中,我正在尋找兩種可能的圖像之一出現。當他們中的一個確實出現時,如果選擇該對象。在Python中停止While循環並退出腳本

但是,我希望腳本結束。它沒有。我試過quit()exit(),但那不是這樣做的。它工作正常,旁邊的while循環停止並完成腳本。

while True: 
    if exists ("lose.png"): 
     click ("lose.png") 
     print ("***** YOU LOSE! *****") 
    if exists ("win.png"): 
     click ("win.png") 
     print ("***** YOU WIN! *****") 
    StopIteration 

quit() 
+0

順便說一句,它似乎並不是你正在使用OCR。這些是圖像,而不是你想要檢測到的文本。 –

回答

5

您可以退出任何環路與break

while True: 
    if exists ("lose.png"): 
     click ("lose.png") 
     print ("***** YOU LOSE! *****") 
     break 

    if exists ("win.png"): 
     click ("win.png") 
     print ("***** YOU WIN! *****") 
     break 

如果既if語句評估爲True,繼續循環。

StopIteration是一個異常,通常由迭代器引發,表示它們已完成。大多數使用它的Python代碼只需要捕獲這個例外,但是如果您想提高它,請使用raise StopIteration()語句。在這裏這樣做毫無意義;您的腳本不會作爲迭代器運行,並且StopIteration異常不會產生預期的效果。

+1

當然,只有當其中一個存在時OP纔會退出循環... –

+0

另外,在循環體內提升'StopIteration'不會真的做你想做的事;它必須在迭代器中被提升* – kindall

+0

是的。但是這停止了兩條if語句的執行。直到腳本找到兩個圖像中的一個,我纔想要休息。隨着中斷它停止腳本 - [信息]退出代碼:0(我應該提到這一點)這就是爲什麼我試着用StopIteration。 – Dave

0

你可以總是由於這樣的:

status = TRUE 
while status: 
     if exists ("lose.png"): 
      click ("lose.png") 
      print ("***** YOU LOSE! *****") 
      status = FALSE 
     if exists ("win.png"): 
      click ("win.png") 
      print ("***** YOU WIN! *****") 
      status = FALSE 
     StopIteration 

    quit() 
0

在Python,break用於退出循環。要退出腳本,請使用sys.exit()。所以:

while True: 
    if exists ("lose.png"): 
     click ("lose.png") 
     print ("***** YOU LOSE!*****") 
    if exists ("win.png"): 
     click ("win.png") 
     print ("***** YOU WIN!*****") 
    break // Exit the loop 
import sys; sys.exit() // Close the program