異常處理 把可能會發生的錯誤,提前在代碼里進行捕捉(監測) try : code except Exception: 出錯後要執行的代碼 下麵是常見的異常: attributeError 試圖訪問一個對象沒有的屬性 Nameerror 訪問一個沒有變數 Valueerror 值類型不匹配 impor ...
異常處理
把可能會發生的錯誤,提前在代碼里進行捕捉(監測)
try :
code
except Exception:
出錯後要執行的代碼
下麵是常見的異常:
attributeError 試圖訪問一個對象沒有的屬性
Nameerror 訪問一個沒有變數
Valueerror 值類型不匹配
importError 導入不存在的模塊
indentationError 縮進錯誤 --> 強類型錯誤,只要犯這種錯誤程式就會崩潰,這種錯誤是抓不到的
syntaxError 語法錯誤 --> 同上
indexError 下標索引超出邊界錯誤
Keyboardinterrupt ctrl+c 無法退出程式
EOFError ctrl+d 無法退出程式
Typeerror 類型不符合
Unboundlocalerror 試圖訪問一個還未被設置的局部變數,基本上是由於另有一個同名的全局變數,導致你以為正在訪問它
valueError 傳入一個調用者不期望的值,及時值的類型是正確的
# -*- coding:utf-8 -*- while True: num1 = input("num1>>").strip() num2 = input("num2>>").strip() try: num1 = int(num1) num2 = int(num2) result = num1 + num2 print(result,name) # except Exception as err: # print("info is error. check") # print(err) except NameError as e: print(e) except ValueError as e: print(e)
Try ..else..finally
Else 不觸發異常執行裡邊的代碼
Finally 無論觸發異常與否都會執行裡邊的代碼
自定義異常
# -*- coding:utf-8 -*- #自定義異常 class YoutubeConnectionError(BaseException): def __init__(self,msg): self.msg = msg def __str__(self): return self.msg name = "Alex" d = [1,2,3] while True: num1 = input("num1>>").strip() num2 = input("num2>>").strip() try: num1 = int(num1) num2 = int(num2) result = num1 + num2 print(result) #raise ImportError('123') raise YoutubeConnectionError('根據法律不能翻牆')#主動觸發異常 #d[3] # except Exception as err: # print("info is error. check") # print(err)筆 except YoutubeConnectionError as e: print(e) except NameError as e: print(e) except ValueError as e: print(e) except Exception as e: print('發生錯誤') else: print("Normal!!!,不發生異常走這裡") finally: print('any無論錯誤與否,都會走這裡')
Assert 斷言的用途
Assert語法用於判斷代碼是否符合執行預期
Assert 1+1=2
Assert 1+ 2 = 2
它一般用來做單元測試,調用上千個藉口,看是都會出現異常
def my_interface(name,age,sorce): assert type(name) is str assert type(age) is int assert type(sorce) is float my_interface("Alex",22,66.3)