此注意事項(xiàng)參考博文:異常機(jī)制使用細(xì)則.
1、不要太依賴異常機(jī)制
python的異常機(jī)制非常方便,對(duì)于信息的傳遞中十分好用(這里信息的傳遞主要有三種,參數(shù)傳遞,全局變量傳遞,以及異常機(jī)制傳遞),但濫用異常機(jī)制也會(huì)帶來(lái)一些負(fù)面影響。過(guò)度使用異常主要表現(xiàn)在兩個(gè)方面:①把異常和普通錯(cuò)誤混淆在一起,不再編寫任何錯(cuò)誤處理代碼,而是以簡(jiǎn)單地引發(fā)異常來(lái)代苦所有的錯(cuò)誤處理。②使用異常處理來(lái)代替流程控制。例子如下:
buf="hello"#例1:使用異常處理來(lái)遍歷arr數(shù)組的每個(gè)元素try:
i=0
whileTrue:
print(buf[i])
i+=1except:
pass#例2:使用流程控制避免下標(biāo)訪問(wèn)異常i=0whilei print(buf[i]) i+=1 例1中假如循環(huán)過(guò)度便會(huì)下標(biāo)訪問(wèn)異常,這時(shí)候把錯(cuò)誤拋出,再進(jìn)行一系列處理,顯然是不可取的,因?yàn)楫惓C(jī)制的效率比正常的流程控制效率差,顯然例2中簡(jiǎn)單的業(yè)務(wù)流程就可以避開(kāi)這種錯(cuò)誤。所以不要熟悉了異常的使用方法后,遇到這種簡(jiǎn)單邏輯,便不管三七二十一引發(fā)異常后再進(jìn)行解決。對(duì)于完全己知的錯(cuò)誤和普通的錯(cuò)誤,應(yīng)該編寫處理這種錯(cuò)誤的代碼,增加程序的健壯性。只有對(duì)于外部的、不能確定和預(yù)知的運(yùn)行時(shí)錯(cuò)誤才使用異常。 2、不要在try塊中引入太多的代碼 在try塊里放置大量的代碼,這看上去很“簡(jiǎn)單”,代碼框架很容易理解,但因?yàn)閠ry塊里的代碼過(guò)于龐大,業(yè)務(wù)過(guò)于復(fù)雜,就會(huì)造成try塊中出現(xiàn)異常的可能性大大增加,從而導(dǎo)致分析異常原因的難度也大大增加。 而且當(dāng)塊過(guò)于龐大時(shí),就難免在try塊后緊跟大量的except塊才可以針對(duì)不同的異常提供不同的處理邏輯。在同一個(gè)try塊后緊跟大量的except塊則需要分析它們之間的邏輯關(guān)系,反而增加了編程復(fù)雜度。所以,可以把大塊的try塊分割成多個(gè)小塊,然后分別捕獲并處理異常。 3、不要忽略捕獲到的異常 不要忽略異常!既然己捕獲到異常,那么except塊理應(yīng)做些有用的事情,及處理并修復(fù)異常。except塊整個(gè)為空,或者僅僅打印簡(jiǎn)單的異常信息都是不妥的!具體的處理方式為: ①處理異常。對(duì)異常進(jìn)行合適的修復(fù),然后繞過(guò)異常發(fā)生的地方繼續(xù)運(yùn)行;或者用別的數(shù)據(jù)進(jìn)行計(jì)算,以代替期望的方法返回值;或者提示用戶重新操作,總之,程序應(yīng)該盡量修復(fù)異常,使程序能恢復(fù)運(yùn)行。 ②重新引發(fā)新異常。把在當(dāng)前運(yùn)行環(huán)境下能做的事情盡量做完,然后進(jìn)行異常轉(zhuǎn)譯,把異常包裝成當(dāng)前層的異常,重新傳給上層調(diào)用者。 ③在合適的層處理異常。如果當(dāng)前層不清楚如何處理異常,就不要在當(dāng)前層使用except語(yǔ)句來(lái)捕獲該異常,讓上層調(diào)用者來(lái)負(fù)責(zé)處理該異常。 以上內(nèi)容為大家介紹了python異常使用注意事項(xiàng),希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://m.2667701.com/