天天看點

異常對象 | Python從入門到精通:高階篇之四十二

異常傳播 | Python從入門到精通:高階篇之四十一

異常對象

我們如何去捕獲到異常呢?

我們來通過代碼分析一下:

print('異常出現前')

print(10/0)

print('異常出現後')           

執行結果:

異常對象 | Python從入門到精通:高階篇之四十二

我們之前是如何處理這些異常的呢?

print('異常出現前')

try:
    print(10/0)
except:
    print('處理異常的代碼~~~')

print('異常出現後')           
異常對象 | Python從入門到精通:高階篇之四十二

在捕獲異常對象之前,我們還需要知道一點。

如果

except

後不跟任何的内容,則此時它會捕獲到所有的異常。

如果在

except

後跟着一個異常的類型,那麼此時它隻會捕獲該類型的異常。

print('異常出現前')

try:
    # print(c)
    print(10/0)
except NameError:
    print(''出現 NameError 異常'')

print('異常出現後')           
異常對象 | Python從入門到精通:高階篇之四十二
異常對象 | Python從入門到精通:高階篇之四十二

此時可以發現,注釋掉

print(c)

之後,程式會出錯,隻能解決NameError的異常。如果要想解決

print(10/0)

的異常,可以再添加一個

ZeroDivisionError

的異常:

except ZeroDivisionError:
    print('出現 ZeroDivisionError 異常')           
異常對象 | Python從入門到精通:高階篇之四十二

此時發現兩個異常都解決了,但是如果現在添加了一個

l = []

l = []

try:
    l[10]           
異常對象 | Python從入門到精通:高階篇之四十二

此時沒有捕獲異常,我們來添加一下:

except IndexError:
    print('出現 IndexError 異常')

except:
    print('未知異常')           
異常對象 | Python從入門到精通:高階篇之四十二

我們再添加一個異常代碼:

1 + 'hello'           
異常對象 | Python從入門到精通:高階篇之四十二

except:

except Exception:

效果一樣,是以可以省略不寫。

Exception 是所有異常類的父類,是以如果except後跟的是Exception,他也會捕獲到所有的異常,可以在異常類後邊跟着一個 as xx 此時xx就是異常對象。

except Exception as e :
    print('未知異常',e)           
異常對象 | Python從入門到精通:高階篇之四十二

我們來看一下e的類型:

print('未知異常',e,type(e))           
異常對象 | Python從入門到精通:高階篇之四十二

在異常處理過程中,除了以上的語句之外,還可以添加

finally

。我們在後面添加

finally

語句。

print('異常出現前')
l = []
try:
    print(10/2)
except NameError:
    print('出現 NameError 異常')
except ZeroDivisionError:
    print('出現 ZeroDivisionError 異常')
except IndexError:
    print('出現 IndexError 異常')
except Exception as e :
    print('未知異常',e,type(e))
finally :
    print('無論是否出現異常,該子句都會執行')

print('異常出現後')           
異常對象 | Python從入門到精通:高階篇之四十二

修改:

print(10/0)           
異常對象 | Python從入門到精通:高階篇之四十二

此時處理異常的語句可改為:

try語句
        try:
            代碼塊(可能出現錯誤的語句)
        except 異常類型 as 異常名:
            代碼塊(出現錯誤以後的處理方式)
        except 異常類型 as 異常名:
            代碼塊(出現錯誤以後的處理方式)
        except 異常類型 as 異常名:
            代碼塊(出現錯誤以後的處理方式)
        else:
            代碼塊(沒出錯時要執行的語句) 
         finally:
            代碼塊(該代碼塊總會執行)  
 
         try是必須的 else語句有沒有都行
        except和finally至少有一個               

配套視訊課程,點選這裡檢視

擷取更多資源請訂閱

Python學習站