要知道,每個迴圈結構(while 或 for)都必須有停止執行的途徑,這樣才不會沒完沒了地執行下去。
例如,下面的迴圈從1數到5:
x = 1
while x <= 5:
print(x)
x += 1
執行結果為:
1
2
3
4
5
但如果像下面這樣不小心遺漏了程式碼行
x += 1
,那麼這個迴圈將沒完沒了地執行:
#這個迴圈將沒完沒了地執行
x = 1
while x <= 5:
print(x)
在這裡,x 的初始值為 1,但根本不會變,因此條件測試
x <= 5
始終為 True,導致 while 迴圈沒完沒了地列印 1,執行結果如下所示:
1
1
1
1
--snip--
每個程式設計師都會偶爾因為不小心而編寫出無限(死)迴圈,在迴圈的退出條件比較微妙時尤其如此。
如果程式陷入無限迴圈,可按組合鍵
Ctrl+C
,也可關閉顯示程式輸出的終端視窗,如果前 2 種方式都無效,比如有些編輯器(如 Sublime Text)內嵌了輸出視窗,這可能導致難以結束無限迴圈,因此不得不關閉編輯器來結束無限迴圈。
讀者可能會問,怎樣才能有效避免編寫出包含無限迴圈的程式呢?
要避免編寫無限(死)迴圈,應務必對每個 while 迴圈(或 for 迴圈)進行測試,確保它按預期那樣結束。如果希望程式在使用者輸入特定值時結束,可執行程式並輸入這樣的值,如果此時程式沒有結束,則說明該迴圈結構會無限迴圈,應檢查程式處理這個值的方式。
總之,
解決無限(死)迴圈的方法只有一個,即確認迴圈結構中至少有一個位置能讓迴圈條件為 False 或讓 break 語句得以執行。