- 零基礎入門學習Python(第2版)
- 小甲魚
- 491字
- 2019-12-20 12:19:34
4.3 避免“懸掛else”問題
什么叫“懸掛else”?
很多編程語言在設計上無法避免這個問題的出現,即使是有多年編程經驗的程序員,一不小心仍然是會“中招”的。
請考慮下面的C語言代碼:

從這個例子的縮進結構和打印內容可以看出,編程者的本意是:如果age不滿足條件(age > 18),就執行else的內容。但事實上程序并不會按照我們的期望去執行,就上面的測試數據而言,程序將直接打印“恭喜,獲得青少年組一等獎!”這個字符串,結果與本意相去甚遠。
會出現這樣的失誤,是因為很多語言對于if-else語法都采用“就近匹配”的原則。所以,上面代碼的else應該是屬于內層的if語句。初學者也好,有多年編程經驗的老程序員也罷,常常會在這上面栽跟頭,這就是著名的“懸掛else”。
而使用Python開發則沒有這方面的顧慮:

前面我們講過:縮進是Python的靈魂,縮進的嚴格要求使得Python的代碼顯得非常精簡并且有層次,這種強制的規范使得代碼必須被正確地對齊。換言之,也就是讓程序員必須在編程的時候就非常確定else是屬于哪個if,而不存在模棱兩可的情況。限制了選擇,從而減少了不確定性,Python鼓勵第一次就能寫出正確的代碼。而且,強制使用正確的縮進,使得Python的代碼整潔、易讀,這就是地球人都喜歡Python的原因。
推薦閱讀