這個特性不夠突出,但是早已經不是什麼秘密了。可能是因為很多程式語言都有else語法,但都不支持這一特性,才使得這個特性如此的不明顯吧,但它卻是Python很有特點的一個特性。
喜歡Python讀者君可以加我們Python學習交流 330637182群內有大量的實戰和新手資料視頻千人大群等你加入。
規則else不僅能用在if語句中,而且可以用在for、while和try語句中。當然for/else,while/else和try/else從語義的層面很類似,雖然他們和if/else語意差很多,不過還是值得一看。
1、for/else
只有當for執行完畢的時候,else才會執行。
Python學習交流330637182 群內每天更新學習資料
這意味著不能被 break 打斷
Python學習交流330637182 群內每天更新學習資料
但是被 continue 跳過是沒問題的
Python學習交流330637182 群內每天更新學習資料
不過,顯然,用異常打斷是不可以的
Python學習交流330637182 群內每天更新學習資料
2、while/else
只有當while因為條件變成falsy,else才會執行
Python學習交流330637182 群內每天更新學習資料
同樣的,這也意味著不能被 break 打斷
Python學習交流330637182 群內每天更新學習資料
當然,continue 和 exception 的例子於 for是一樣的,這裡就不做過多的介紹了。
3、try/else
只有當在try中沒有發生異常時,else才會執行。
Python學習交流330637182 群內每天更新學習資料
如果try引發了異常,那麼else將無法執行
Python學習交流330637182 群內每天更新學習資料
注意:except並不負責處理else中的異常
Python學習交流330637182 群內每天更新學習資料
陷阱這個規則還有一些小陷阱
Python學習交流330637182 群內每天更新學習資料
由於return強迫流程離開了整個主體快,因此不會出發else
要說else在Python中最大的價值的地方就是使得try/except語法更加清晰可讀
Python學習交流330637182 群內每天更新學習資料
Python學習交流330637182 群內每天更新學習資料
可以看到,這個代碼,更加能夠體現出except是服務dangerous_call() 而不是 after_call()的。