python學習筆記13(異常處理)
阿新 • • 發佈:2019-01-04
異常處理
需求: 當程式遇到問題時不讓程式結束,而越過錯誤繼續向下執行
try……except……else語句
格式:
try:
語句t
except 錯誤碼 as e:
語句1
except 錯誤碼 as e:
語句2
……
except 錯誤碼 as e:
語句n
else:
語句e
注意: else語句可有可無
作用: 用來檢測try語句塊中的錯誤,從而讓except語句捕獲錯誤資訊並處理
邏輯: 當程式執行到try-except-else語句時
1、如果當try“語句t”執行出現錯誤,會匹配第一個錯誤碼,如果匹配上就執行對應"語句"
2、如果當try“語句t”執行出現錯誤,沒有匹配的異常,錯誤將會被提交到上一層的try語句。或者到程式的最上層
3、如果當try“語句t”執行沒有出現錯誤,執行else下的“語句e”(你得有)
try:
print(3 / 1)
except NameError as e:
print("沒有該變數")
except ZeroDivisionError as e:
print("除數為0了")
else:
print("程式碼沒有問題")
#輸出:
3.0
程式碼沒有問題
使用except而不使用任何的錯誤型別
try: #print(4 / 0) print(num) except: print("程式出現了異常") #使用except帶著多種異常 try: print(5 / 0) except (NameError, ZeroDivisionError): print("出現了NameError或ZeroDivisionError") #輸出: 程式出現了異常 出現了NameError或ZeroDivisionError
特殊
1、錯誤其實是class(類),所有的錯誤都繼承自BaseException,所以在捕獲的時候,它捕獲了該型別的錯誤,還把子類一網打盡
try:
print(5 / 0)
except BaseException as e:
print("異常1")
except ZeroDivisionError as e:
print("異常2")
#輸出:異常1
2、跨越多層呼叫,main呼叫了func2,func2呼叫了func1,func1出現了錯誤,這時只要main捕獲到了就可以處理
def func1(num): print(1 / num) def func2(num): func1(num) def main(): func2(0) try: main() except ZeroDivisionError as e: print("****") #輸出:****
try……except……finally語句
格式:
try:
語句t
except 錯誤碼 as e:
語句1
except 錯誤碼 as e:
語句2
……
except 錯誤碼 as e:
語句n
finally:
語句f
作用: 語句t無論是否有錯誤都將執行最後的語句f
示例:
try:
print(1/0)
except NameError as e:
print("為0了")
finally:
print("必須執行我")
常見的異常型別:
斷言:
def func(num, div):
assert (div != 0), "div不能為0"
return num / div
print(func(10, 0))
#輸出:AssertionError: div不能為0