異常處理.12.11部落格
阿新 • • 發佈:2020-12-12
技術標籤:python
異常處理語句
程式開發時,有時會產生一些錯誤,如果輸入的資料符合要求,程式就可以正常執行,否則就將丟擲異常並停止執行。此時就需要異常處理語句。
python常見的異常,瞭解即可
異常 | 描述 |
---|---|
Name Error | 嘗試訪問一個沒有宣告的變數引發的錯誤 |
IndexError | 索引超出序列範圍引發的錯誤 |
-IndentationError- | -縮排錯誤- |
KeyError | 請求一個不存在的字典關鍵字引發的錯誤 |
IOError | 輸入輸出錯誤(如要讀取的檔案不存在) |
-ImportError- | -當import語句無法找到模組或from無法在模組中找到相應的名稱時引發的錯誤- |
Attribute Error | 嘗試訪問未知的物件屬性引發的錯誤 |
TypeError | 型別不適合引發的錯誤 |
-MemoryError- | -記憶體不足- |
ZeroDivisionError | 除數為0引發的錯誤 |
try…except語句
如分蘋果,我都知道0不能做除數,如果輸入孩子數為0時會報錯,
def division(): """功能:分蘋果""" print("==========分蘋果==========") apple = int(input("請輸入蘋果個數:")) children = int(input("輸入小朋友個數:")) result = apple//children remain = apple - result*children if remain > 0: print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個," "剩下",remain,"個") else: print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個") if__mane__=='__main__': try: division() except ZeroDivisionError: print("\n出錯了 ~_~ ---蘋果不能被0個學生平分")
這樣再次執行程式時,這樣在輸入學生數為0時就不再報錯
通常需要處理多個異常也可以用下面程式碼實現
if __name__ == '__main__':
try:
division()
except ZeroDivisionError:
print("\n出錯了 ~_~ ---蘋果不能被0個學生平分")
except ValueError as e:
print("輸入錯誤",e)
或者
try: division() except (ValueError,ZeroDivisionError) as e: print("出現錯誤:",e)
try…except…else
該語句中的內容發現異常時else將不被執行,當沒有異常丟擲時,將輸出else的內容
try:
division()
except (ValueError,ZeroDivisionError) as e:
print("出現錯誤:",e)
else:
print("分蘋果完成") #沒有異常時執行
try…except…finally
無論有無異常,finally程式碼塊中的程式碼都會被執行。
try:
division()
except (ValueError,ZeroDivisionError) as e:
print("出現錯誤:",e)
else:
print("分蘋果完成") #沒有異常時執行
finally:
print("進行一次分蘋果的操作。") #無論有無異常都會執行
使用raise語句丟擲異常
依舊分蘋果,如果10個孩子,5個蘋果,顯然蘋果不夠分,但卻沒有出現異常,此時就需要raise丟擲一個與實際不符的異常
def division():
"""功能:分蘋果"""
print("==========分蘋果==========")
apple = int(input("請輸入蘋果個數:"))
children = int(input("輸入小朋友個數:"))
if apple<children:
raise ValueError("蘋果太少不夠分") #手動定義一個異常
result = apple//children
remain = apple - result*children
if remain > 0:
print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個,"
"剩下",remain,"個")
else:
print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個")