pyhon捕捉異常&&常見錯誤歸納!
在Python運行遇到異常時,程序會終止;而在我們編程過程中,錯誤是不可避免的,這時我們需要捕捉到異常,還需要程序繼續運行;這時我們就需要根據異常Traceback到出錯點,進行分析改正;
1. 異常捕獲
當發生異常時,我們就需要對異常進行捕獲,然后進行相應的處理。python的異常捕獲常用try…except…結構,把可能發生錯誤的語句放在try模塊里,用except來處理異常,每一個try,都必須至少對應一個except。
1.1 捕獲所有異常
捕獲所有異常的語句如下:
#?捕獲所有異常try: ?????<語句>????#?需要被判斷的語言塊except: ?????<異常處理語句>???#?出現異常后的處理語句12345
例子:
import?systry: ????sys.exit()except: ????print('異常被捕捉到啦~~')#?輸出:#?'異常被捕捉到啦~~'12345678
以上語句中,由于沒有指定異常,所有的異常都將被捕捉,甚至包括鍵盤中斷和程序退出請求;(try后的語句中如果使用sys.exit(),無法退出python程序,因為sys.exit()作為異常被捕獲了;)
try: <語句>????except?Exception: <異常處理語句>???#?出現異常后的處理語句1234
例子:
import?systry: ????sys.exit()except?Exception: ????print('異常被捕捉到啦~~')#?程序退出了,說明沒有捕捉到異常;1234567
在except后增加Exception,可以捕捉全部異常,但是不會捕捉鍵盤中斷和程序退出請求;
1.2 捕捉指定異常
捕捉指定異常,只需要在except后增加異常的名稱即可;這里的異常名稱可以使用報錯的異常名稱;
#?捕捉指定異常try: ?????<語句>except?<異常名>: <異常處理語句>???#?出現異常后的處理語句12345
1.3 捕捉多個異常
把需要捕捉的異常名稱全部列在except后,這時異常沒有優先級,全部捕捉;
#?捕捉多個異常,不區分優先級try: ?????<語句>except?(<異常名1>,?<異常名2>,?...): <異常處理語句>???#?出現異常后的處理語句12345
如果需要區分異常的優先級,則將except按照優先級分開處理,舉例如下:
#?捕捉多個異常,區分優先級try: ?????<語句>except?<異常名1>: print('異常說明1') ?except?<異常名2>: print('異常說明2') ?except?<異常名3>: print('異常說明3')123456789101112
處理順序:當異常發生時,先執行異常名1的語句,如果匹配則執行:print(‘異常說明1’),若不匹配,則執行異常名2,以此類推;
備注:1. 這種方式可以支持的except語句的數量沒有限制; 2. 如果都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。
1.4 異常中的else
當try語句中沒有某些異常時,我們可以添加else語句,來執行其他語句;即:若有異常發生則執行異常處理語句,若無異常發生,則執行else語句;
#?異常中的elsetry: <語句>except?<異常名1>: <異常處理語句>???#?有異常發生時,執行該語句 ?else: <語句>??#?無異常發生時,則執行該語句123456789
1.5 異常中的finally
有些時候,無論try語句中是否有異常,我們都希望執行一些語句,這時候需要使用finally語句;即:無論異常是否發生,都會執行finally語句;
#?異常中的finally語句try: ?????<語句> ?finally: ??????<語句>123456
2. 用戶自定義異常_raise 主動觸發異常
在python編程中,我們可以主動觸發異常,即:我們可以規定何種情況下生成何種異常;
def?not_zero(num): ????try: ????????if?num?==?0: ????????????raise?ValueError('參數為0,參數錯誤') ????????return?num????except?Exception?as?e: ????????print('錯誤類型為:',e.__class__.__name__) ????????print('錯誤詳情為:',e)not_zero(0)1234567891011
輸出:
錯誤類型為:?ValueError 錯誤詳情為:?參數為0,參數錯誤12
3. 查看異常位置_traceback模塊
有時我們需要打印出發生異常的位置,就需要使用traceback模塊;舉例如下:
import?tracebacktry: ????1/0except?Exception?as?e: ????print(e) ????print('---------------------') ????traceback.print_exc() ????print('---------------------') ????a?=?traceback.format_exc() ????print(a) ????print('---------------------')1234567891011
輸出:
#?print(e)的輸出結果division?by?zero------------------------------------------#?print(a)?的輸出結果Traceback?(most?recent?call?last): ??File?"D:/PY_useful/3_python?基礎/11.異常處理.py",?line?21,?in?
4. 常見異常名 & 描述
Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。