異常處理(python3入門)
阿新 • • 發佈:2018-12-18
異常處理的幾種形式:
1、except多分支
#異常處理1: # try: # # print(x) # li = [1,2,3,] # # print(li[5]) # print('=============>') # dic1 = {'x':1} # print(dic1['y']) # except NameError as e: #或者可以使用except (NameError,IndexError,KeyError) as e: # print('name',e) # except IndexError as e:except多分支# print('index',e) # except KeyError as e: # print('key',e) # # # print('++++++!!!!')
2、except的'元組或'形式
#異常處理2: # try: # # print(x) # li = [1,2,3,] # # print(li[5]) # print('=============>') # dic1 = {'x':1} # print(dic1['y']) #(錯誤1,錯誤2,錯誤3)except (NameError,IndexError,KeyError) as e: # print('++++++!!!!',e)
3、萬能異常
#異常處理3: # try: # print(x) # li = [1,2,3,] # # print(li[5]) # print('=============>') # dic1 = {'x':1} # print(dic1['y']) # except Exception as e: # print('萬能',e)exception# # print('++++++!!!!')
4、else的使用
#異常處理4: # try: # # print(x) # li = [1,2,3,] # # print(li[5]) # print('=============>') # dic1 = {'x':1} # # print(dic1['y']) # except NameError as e: #或者可以使用except (NameError,IndexError,KeyError) as e: # print('name',e) # except IndexError as e: # print('index',e) # except KeyError as e: # print('key',e) # else: # print('被監測的程式碼塊沒有任何異常發生時會執行else的程式碼')else
5、finally的使用
#異常處理5: try: # print(x) li = [1,2,3,] # print(li[5]) print('=============>') dic1 = {'x':1} print(dic1['y']) except NameError as e: #或者可以使用except (NameError,IndexError,KeyError) as e: print('name',e) except IndexError as e: print('index',e) except KeyError as e: print('key',e) else: print('被監測的程式碼塊沒有任何異常發生時會執行else的程式碼') finally: #通常用來回收資源的動作,無論異常還是正常,都會將一些必須要回收的資源進行回收 print('無論被監測的程式碼塊是否有異常發生,都會執行finally的程式碼體')finally
#try...except 能少用,儘量少用,不到萬不得已不要去使用。(類似打補丁的效果)
# try可以只和finally連用,
# try也可以只和except連用
# 但是try不能只和else連用
6、斷言
#斷言 #上半部分 res = ['a','b'] #AssertionError assert len(res) == 3 #斷定res的長度等於3,如果不等於3 就拋異常 # if len(res) != 3: #等同上述斷言的用法,但是斷言對於程式碼體bug排障 比較簡潔 # raise TypeError #下半部分 res[2]assert
7、自定義異常
#自定義異常 class MyException(BaseException): def __init__(self,msg): self.msg = msg def __str__(self): return '<%s>'%self.msg raise MyException('業務相關的錯誤')(BaseException)