怎麼避免Python程式出現死迴圈(無限迴圈)?

2020-07-16 10:05:05
要知道,每個迴圈結構(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 語句得以執行。