欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

函數(shù)遇到問題是拋出錯誤好還是約定返回值好

林國瑞2年前15瀏覽0評論

函數(shù)遇到問題是拋出錯誤好還是約定返回值好?

結(jié)論:不說那個好,拋出幾個例子,題主您看看,哪個更好。

前言

就跟老師講課一樣,直接給說一個定理,一個結(jié)論,太抽象,我都不知道這是什么呢,你就告訴我要怎么用?

所以本文用代碼樣例,告訴你哪個才是更好的選擇。

手動控制異常

python的異常信息,可以手動顯式拋出,像下面這樣。

使用raise關(guān)鍵字,拋出ValueError異常。那么執(zhí)行后就可以異常中斷。

使用try - catch 結(jié)構(gòu)捕捉異常信息,可以寫入日志,或控制臺打印。

這樣不會中斷程序,繼續(xù)運行,在線上的代碼,尤其如此。

上圖示例,一個沒有被捕捉到的異常,中斷了程序運行。

最佳實踐

如何正確而優(yōu)雅無害地控制拋出異常呢?上段我們使用的兩種方式,手動修改了execption message內(nèi)容,這樣看起來錯誤信息很直觀,可是不利于排查故障點。

所以最佳實踐上,可以從這些點出發(fā)。

1 - 不要修改異常信息

將程序的錯誤信息,捕捉到之后,輸出到日志文件。

2 - 使用sys.exc_info()保留堆棧追蹤和錯誤值

如圖,sys.exec_info()返回錯誤類型,值,和堆棧信息,方便定位。執(zhí)行起來大概是這樣的。

不過要注意的是 python2和python3略有區(qū)別。python3你可以使用異常信息鏈式追蹤。

類似上述方式。

一個長列表:python有哪些異常

下面列出了python內(nèi)29個異常的詳細情況。

這些都是在程序運行中可能拋出的,也是程序員可以在程序中手動拋出的異常類型。

結(jié)語

一般寫小型的腳本處理函數(shù),可以手動控制異常,這也是python的常見做法。

而大型的框架,一般對異常類型做了深層次的封裝,不同類型的庫,拋出不同的異常。

面向?qū)ο蟮膶懛ǎ梢院苋菀子美^承的方式處理異常。

我是@程序員小助手,持續(xù)分享編程與程序員成長相關(guān)的內(nèi)容,歡迎關(guān)注~~