1. 程式人生 > >Python3 從零單排22_異常處理

Python3 從零單排22_異常處理

  異常分為兩類,可預知和不可預知。

  錯誤發生的條件如果是可以預知的,此時應該用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)