Python3 從零單排22_異常處理
阿新 • • 發佈:2018-12-19
異常分為兩類,可預知和不可預知。
錯誤發生的條件如果是可以預知的,此時應該用if判斷去預防異常
AGE=10 age=input('>>: ').strip() if age.isdigit(): age=int(age) if age > AGE: print('太大了')
錯誤發生的條件如果是不可預知的,此時應該用異常處理機制,try...except
try: f=open('a.txt','r',encoding='utf-8') print(next(f),end='')print(next(f),end='') print(next(f),end='') print(next(f),end='') print(next(f),end='') print(next(f),end='') print(next(f),end='') f.close() except StopIteration: print('出錯啦') print('====>1') #多分支:被監測的程式碼塊丟擲的異常有多種可能性,並且我們需要針對每一種異常型別都定製專門的處理邏輯 try: print('===>1') # name print('===>2') l=[1,2,3] # l[100] print('===>3') d={} d['name'] print('===>4') except NameError as e: print('--->',e) except IndexError as e: print('--->',e) except KeyError as e: print('--->',e) print('====>afer code') #萬能異常:Exception,被監測的程式碼塊丟擲的異常有多種可能性,# 並且我們針對所有的異常型別都只用一種處理邏輯就可以了,那就使用Exception try: print('===>1') # name print('===>2') l=[1,2,3] l[100] print('===>3') d={} d['name'] print('===>4') except Exception as e: print('異常發生啦:',e) print('====>afer code') try: print('===>1') # name print('===>2') l=[1,2,3] # l[100] print('===>3') d={} d['name'] print('===>4') except NameError as e: print('--->',e) except IndexError as e: print('--->',e) except KeyError as e: print('--->',e) except Exception as e: print('統一的處理方法') print('====>afer code') #其他結構 try: print('===>1') # name print('===>2') l=[1,2,3] # l[100] print('===>3') d={} d['name'] print('===>4') except NameError as e: print('--->',e) except IndexError as e: print('--->',e) except KeyError as e: print('--->',e) except Exception as e: print('統一的處理方法') else: print('在被檢測的程式碼塊沒有發生異常時執行') finally: print('不管被檢測的程式碼塊有無發生異常都會執行') # print('====>afer code') # finally的應用 try: f=open('a.txt','r',encoding='utf-8') print(next(f)) print(next(f)) print(next(f)) print(next(f)) print(next(f)) print(next(f)) finally: f.close()
自定義異常
class XgError(BaseException): def __init__(self,msg): self.msg = msg def __str__(self): return self.msg try: raise XgError("自定義的異常!") except Exception as e: print(e)