Python學習之異常處理的避坑指南
最終想了想,還是把這個章節(jié)單獨拎出來,雖然字數(shù)不多。
在代碼中,存在return也應當執(zhí)行finally;
存在return時,else是不執(zhí)行的;
無return時,else正常執(zhí)行;
如果發(fā)生異常,則else也不執(zhí)行
finally 與 return 的執(zhí)行順序
示例代碼如下:
class Test(object): ? ? def division(self, num1, num2): ? ? ? ? try: ? ? ? ? ? ? if num2 == 0: ? ? ? ? ? ? ? ? return '除數(shù)不能為0' ? ? ? ? ? ? avg = num1 / num2 ? ? ? ? ? ? return avg ? ? ? ? except Exception as e: ? ? ? ? ? ? print('ERROR') ? ? ? ? finally: ? ? ? ? ? ? print('FINALLY') if __name__ == '__main__': ? ? test = Test() ? ? print(test.division(6, 0)) ? ?? # >>> 執(zhí)行結(jié)果如下: # >>> FINALLY # >>> 除數(shù)不能為0?
注意:即使有return也要是會執(zhí)行finally的,而且是在return之前執(zhí)行它。那么最后的結(jié)果為。
else 與 return 的執(zhí)行順序
示例代碼如下:
class Test(object): ? ? def division(self, num1, num2): ? ? ? ? try: ? ? ? ? ? ? avg = num1 / num2 ? ? ? ? ? ? return avg ? ? ? ? except Exception as e: ? ? ? ? ? ? print('ERROR') ? ? ? ? else: ? ? ? ? ? ? print('No ERROR') ? ? ? ? finally: ? ? ? ? ? ? print('FINALLY') if __name__ == '__main__': ? ? test = Test() ? ? print(test.division(6, 2)) # >>> 執(zhí)行結(jié)果如下: # >>> FINALLY # >>> 3.0
注意:有return時else是不執(zhí)行的。所以執(zhí)行結(jié)果如上面的示例代碼
那么 無 return 時,執(zhí)行結(jié)果又怎樣?
class Test(object): ? ? def division(self, num1, num2): ? ? ? ? try: ? ? ? ? ? ? avg = num1 / num2 ? ? ? ? ? ? # return avg ? ? ? ? except Exception as e: ? ? ? ? ? ? print('ERROR') ? ? ? ? else: ? ? ? ? ? ? print('No ERROR') ? ? ? ? finally: ? ? ? ? ? ? print('FINALLY') if __name__ == '__main__': ? ? test = Test() ? ? print(test.division(6, 2)) ? ?? # >>> 執(zhí)行結(jié)果如下: # >>> No ERROR # >>> FINALLY # >>> None
從運行結(jié)果我們得出結(jié)論:無return時,正常執(zhí)行else 。
如果是發(fā)生異常的情況下, else 也是不會執(zhí)行的。代碼示例如下:
class Test(object): ? ? def division(self, num1, num2): ? ? ? ? try: ? ? ? ? ? ? avg = num1 / num2 ? ? ? ? ? ? return avg ? ? ? ? except Exception as e: ? ? ? ? ? ? print('ERROR') ? ? ? ? else: ? ? ? ? ? ? print('No ERROR') ? ? ? ? finally: ? ? ? ? ? ? print('FINALLY') if __name__ == '__main__': ? ? test = Test() ? ? print(test.division(4, 0)) ? ?? # >>> 執(zhí)行結(jié)果如下: # >>> ERROR # >>> FINALLY # >>> None
總結(jié)
1、finally 與 return 的執(zhí)行 順序;即使有 return 也要執(zhí)行 finally 的, 而且是在 return 之前執(zhí)行它。
2、else 與 return 的執(zhí)行順序;有 return 時, else 是不執(zhí)行的。無 return 時, 正常執(zhí)行的 else 如果發(fā)生異常則不會繼續(xù)執(zhí)行else。
到此這篇關(guān)于Python學習之異常處理的避坑指南的文章就介紹到這了,更多相關(guān)Python異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談pandas篩選出表中滿足另一個表所有條件的數(shù)據(jù)方法
今天小編就為大家分享一篇淺談pandas篩選出表中滿足另一個表所有條件的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02Python 爬蟲實現(xiàn)增加播客訪問量的方法實現(xiàn)
這篇文章主要介紹了Python 爬蟲實現(xiàn)增加播客訪問量的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10keras獲得model中某一層的某一個Tensor的輸出維度教程
今天小編就為大家分享一篇keras獲得model中某一層的某一個Tensor的輸出維度教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01