異常傳播 | Python從入門到精通:高階篇之四十一
異常對象
我們如何去捕獲到異常呢?
我們來通過代碼分析一下:
print('異常出現前')
print(10/0)
print('異常出現後')
執行結果:

我們之前是如何處理這些異常的呢?
print('異常出現前')
try:
print(10/0)
except:
print('處理異常的代碼~~~')
print('異常出現後')
在捕獲異常對象之前,我們還需要知道一點。
如果
except
後不跟任何的内容,則此時它會捕獲到所有的異常。
如果在
except
後跟着一個異常的類型,那麼此時它隻會捕獲該類型的異常。
print('異常出現前')
try:
# print(c)
print(10/0)
except NameError:
print(''出現 NameError 異常'')
print('異常出現後')
此時可以發現,注釋掉
print(c)
之後,程式會出錯,隻能解決NameError的異常。如果要想解決
print(10/0)
的異常,可以再添加一個
ZeroDivisionError
的異常:
except ZeroDivisionError:
print('出現 ZeroDivisionError 異常')
此時發現兩個異常都解決了,但是如果現在添加了一個
l = []
:
l = []
try:
l[10]
此時沒有捕獲異常,我們來添加一下:
except IndexError:
print('出現 IndexError 異常')
except:
print('未知異常')
我們再添加一個異常代碼:
1 + 'hello'
except:
與
except Exception:
效果一樣,是以可以省略不寫。
Exception 是所有異常類的父類,是以如果except後跟的是Exception,他也會捕獲到所有的異常,可以在異常類後邊跟着一個 as xx 此時xx就是異常對象。
except Exception as e :
print('未知異常',e)
我們來看一下e的類型:
print('未知異常',e,type(e))
在異常處理過程中,除了以上的語句之外,還可以添加
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('異常出現後')
修改:
print(10/0)
此時處理異常的語句可改為:
try語句
try:
代碼塊(可能出現錯誤的語句)
except 異常類型 as 異常名:
代碼塊(出現錯誤以後的處理方式)
except 異常類型 as 異常名:
代碼塊(出現錯誤以後的處理方式)
except 異常類型 as 異常名:
代碼塊(出現錯誤以後的處理方式)
else:
代碼塊(沒出錯時要執行的語句)
finally:
代碼塊(該代碼塊總會執行)
try是必須的 else語句有沒有都行
except和finally至少有一個
配套視訊課程,點選這裡檢視
擷取更多資源請訂閱
Python學習站