作用:
處理程序異常、拋出異常、友好輸出異常
1. 如何捕獲異常、處理異常
格式:
try:
pass
except ValueError as e:
pass
except Exception as e:
pass
else:
pass
finally:
pass
相關注釋:
try 包含在try下的所有代碼塊都會進行異常檢測處理
execpt 處理異常 其后面的e(標准故障信息)可以指定也可以不指定
finally 不管是否出現異常都會執行其下面的代碼塊
具體如下圖所示:
2. 異常的種類
上面的故障處理模塊只檢測了Exception異常類,其實這個故障是所有異常的基類(父類) 無論什么異常都可以用他進行處理,不過在程序中要處理指定異常那么就必須使用相關的派生類(子類)比如:
IndexError 下標錯誤
KeyError key錯誤
NameError 名稱錯誤
ValueError 值錯誤
…
那么如果我定義了NameError 和 ValueError Exception等等這些異常處理標簽如果我有一個ValueError的異常該如何進行處理呢?請看下圖
異常會從上到下一條條匹配異常處理標簽直到匹配到為止 ExceptError在正常情況下放在異常處理程序的最末端 來處理未知異常,如果有些異常需要特殊操作為,放在“except ExceptError”的上面。
3. 自定義異常
了解自定義異常之前 首先需要理解兩個概念:
1. 類中的方法__str__(self) 執行類的時候會返回其中的內容 用於輸出異常信息
例如:
#定義Alan_class類
class Alan_class(Exception):
#定義__str__方法
def __str__(self):
#指定輸出信息
return 'Alan Error'
#執行類Alan_class
print Alan_class()
輸出結果為:
Alan Error
2. raise 拋出異常
比如 執行 raise ValueError() 那么就會拋出一個 ValueError值錯誤的異常
了解完上面的兩個知識點下面開始了解如何進行定義自己的異常
通過上圖我們簡單的梳理下:
第一步:定義異常
class 異常名稱 (Exception):
def __init__(self,msg)
self.message=msg
def __str__(self): //定義__str__函數處理異常
判斷是否輸入了自定義的異常信息
if 輸入了:
return ‘自定義異常信息’
else:
rerun ‘默認異常信息’
第二步:拋出並處理異常
raise 異常名稱(‘自定義異常信息’) //觸發異常
except 異常名稱,異常信息
print 異常信息
4. assert 斷言
如果assert斷言的條件為假,則拋出異常AssertError,等同於 判斷+raise
try:
#如果兩個字符串不相等則為假拋出異常
assert 'Lisa' == 'Alan'
#except處理異常
except Exception:
print 'name not same'
執行結果:
name not same