日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python學習之異常處理的避坑指南_python

作者:渴望力量的哈士奇 ? 更新時間: 2022-05-19 編程語言

最終想了想,還是把這個章節單獨拎出來,雖然字數不多。

在代碼中,存在return也應當執行finally;

存在return時,else是不執行的;

無return時,else正常執行;

如果發生異常,則else也不執行

finally 與 return 的執行順序

示例代碼如下:

class Test(object):

? ? def division(self, num1, num2):
? ? ? ? try:
? ? ? ? ? ? if num2 == 0:
? ? ? ? ? ? ? ? return '除數不能為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))
? ??
# >>> 執行結果如下:
# >>> FINALLY
# >>> 除數不能為0?

注意:即使有return也要是會執行finally的,而且是在return之前執行它。那么最后的結果為。

else 與 return 的執行順序

示例代碼如下:

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))


# >>> 執行結果如下:
# >>> FINALLY
# >>> 3.0

注意:有return時else是不執行的。所以執行結果如上面的示例代碼

那么 無 return 時,執行結果又怎樣?

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))
? ??
# >>> 執行結果如下:
# >>> No ERROR
# >>> FINALLY
# >>> None

從運行結果我們得出結論:無return時,正常執行else 。

如果是發生異常的情況下, else 也是不會執行的。代碼示例如下:

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))
? ??
# >>> 執行結果如下:
# >>> ERROR
# >>> FINALLY
# >>> None

總結

1、finally 與 return 的執行 順序;即使有 return 也要執行 finally 的, 而且是在 return 之前執行它。

2、else 與 return 的執行順序;有 return 時, else 是不執行的。無 return 時, 正常執行的 else 如果發生異常則不會繼續執行else。

原文鏈接:https://blog.csdn.net/weixin_42250835/article/details/123490565

欄目分類
最近更新