大家好,我是迷龍。
目前正在學習python基礎,同時也在leetcode-cn上刷算法題目,有興趣的同學一起哦。
最近學習了python如何處理異常,發現一篇比較好的文章,整理了一下,供大家學習研究。
一、什麼是異常?
當無法正確處理程序時就會出現異常。當異常發生時我們需要捕獲處理它,否則程序會終止執行。
二、基礎語法
捕捉異常可以使用tryexcept語句。
如果你不想在異常發生時結束你的程序,只需在try裡捕獲它。
try:
檢測異常代碼段
except:
發生異常後執行代碼段
else:
未發生異常執行代碼段
finally:
最終執行代碼段三、基本原理
四、具體示例
例子一:
try:
s = input("請輸入內容:")
if s is None:
print ("s 是空對象")
print(len(s)) #這句拋出異常
except TypeError:
print("類型錯誤,空對象沒有長度")
else:
print("沒有問題,正常執行!")
finally:
print('不管怎樣,我都會執行')例子二:
當在try塊中拋出一個異常,立即執行finally塊代碼。
try:
s = None
if s is None:
print ("s 是空對象")
print(len(s)) #這句拋出異常
except TypeError:
print("類型錯誤,空對象沒有長度")
else:
print("沒有問題,正常執行!")
finally:
print('不管怎樣,我都會執行')五、捕獲異常的操作
1. 使用except而帶多種異常類型有多個expect的時候會首先執行第一個能被捕獲到的異常並且只執行一個。
try:
正常的操作
except(Exception1[, Exception2[,...ExceptionN]]]):
發生以上多個異常中的一個,執行這塊代碼
else:
如果沒有異常執行這塊代碼
2.使用多層try的時候except的傳遞多重異常的處理,可以在try語句中嵌套另一個try語句,一旦發生異常,python匹配最近的except語句。
若是內部except能夠處理該異常,則外圍try語句不會捕獲異常。若是不能,或者忽略,外圍try處理
內層異常捕獲失敗執行內層finally跳出外層執行異常捕獲。
try:
try:
x = 1
y = 0
z= x/y
except NameError:
print ("NameError")
finally:
print ("Finally inside")
except :
print ("All exception outside")
finally:
print ("Finally outside")
3. 自己拋出異常觸發異常時候,我們可以使用raise語句自己觸發異常。raise 唯一的一個參數指定了要被拋出的異常。它必須是一個異常的實例或者是異常的類(也就是 Exception 的子類)。
try:
s = None
if s is None:
print ("s 是空對象")
raise NameError #如果引發NameError異常,後面的代碼將不能執行
print(len(s)) #這句不會執行,但是後面的except還是會走到
except TypeError:
print("類型錯誤空對象沒有長度")
except NameError:
print("接收到raise的異常NameError")
finally:
print('end test4')
4.拋出異常時候的參數附加顯示print("test5")
def myerror( level ):
if level < 1:
raise Exception(str(level) + " is Invalid level!")
# 觸發異常後,後面的代碼就不會再執行
try:
myerror(0) # 觸發異常
except Exception as err:
print(Exception)
print(type(err))
print(err)
else:
print("successfully")
finally:
print('end test5')六、創建自己的異常
通過創建一個新的異常類,程序可以命名它們自己的異常。你可以通過創建一個新的異常類來擁有自己的異常。異常類繼承自 Exception 類。舉個例子:
#自定義異常
class LengthRequiredException(Exception):
def __init__(self,length,minLength):
Exception.__init__(self)
self.length = length
self.minLength = minLength
#引發自定義的異常
l = [1,2,3,4,5]
minLength = 6
try:
raise LengthRequiredException(len(l),minLength)
except IndexError:
print("index out of bounds")
except LengthRequiredException as e:
print("Length not fit :length is %d required %d" %(e.length,e.minLength))
else:
print("no exception was raised")
finally:
print("finally will be execute")參考文章:
https://blog.csdn.net/qq_41554005/article/details/92246002