安裝IDEA2019【破解】
阿新 • • 發佈:2020-09-15
異常是錯誤發生的訊號,一旦程式出錯就會產生一個異常,
如果該異常沒有被應用程式處理,那麼該異常就會丟擲來,程式的執行也隨之終止。
異常包含三個部分:
- traceback異常的追蹤資訊
- 異常的型別
- 異常的資訊
錯誤分為兩大類:
1.語法上的錯誤:在程式執行前就應該立即修正
2.邏輯上的錯誤
二、為何要異常處理
避免程式因為異常而崩潰,所以在應用程式中應該對異常進行處理,從而增強程式的健壯性
三、如何異常處理
try: #try監聽下面的程式碼塊 程式碼1 程式碼2 程式碼3 ...... except NameError: 當丟擲的異常時 NameError時執行的子程式碼塊
# 異常處理: try: print('====>1') print('====>2') print('====>3') l = [1,2,3] l[100] #IndexError #執行到此處直接跳到except下的程式碼塊 print('====>4') #不執行 except IndexError: print('IndexError')
#異常處理多分支 try: print('====>1') print('====>2') print('====>3') l = [1,2,3] d = {'x':1,'y':2} d['z'] #KeyError l[100] #IndexError #執行到此處直接跳到except下的程式碼塊 print('====>4') #不執行 except IndexError: print('IndexError') except KeyError: print('KeyError') print('other code')
try: print('====>1') print('====>2') print('====>3') l = [1,2,3] d = {'x':1,'y':2} # d['z'] #KeyError # l[100] #IndexError print('====>4') #不執行 except (KeyError,IndexError) as e: #(KeyError,IndexError)捕捉其中一種異常 print(e)
萬能異常型別 Exception:可以捕捉任意型別的異常
try: print('====>1') print('====>2') print('====>3') l = [1,2,3] d = {'x':1,'y':2} d['z'] #KeyError l[100] #IndexError print('====>4') #不執行 except Exception as e: # as 給異常起別名 print(e) print('other code')
try + else...:else必須放到後面,else的子程式碼塊會在被檢測的程式碼沒有異常的情況下執行
try: print('=====1') print('=====2') print('=====3') d = {'x': 1, 'y': 2} # d['z'] # KeyError # xxx print('=====4') l = [1, 2, 3] # l[1000] # IndexError print('=====5') except IndexError as e: print('IndexError:', e) except KeyError as e: print('KeyError:', e) except Exception as e: print('Exception:',e) else: print('else必須放到後面,else的子程式碼塊會在被檢測的程式碼沒有異常的情況下執行') print('other code')
try + finally...:無論finally前面被檢測的程式碼有沒有異常都會執行
try: f=open('a.txt','w') print('=====1') print('=====2') print('=====3') d = {'x': 1, 'y': 2} # d['z'] # KeyError # xxx 'xx' > 10 print('=====4') l = [1, 2, 3] # l[1000] # IndexError print('=====5') except IndexError as e: print('IndexError:', e) except KeyError as e: print('KeyError:', e) # except Exception as e: # print('Exception:',e) else: print('else必須放到後面,else的子程式碼塊會在被檢測的程式碼沒有異常的情況下執行') finally: print('無論被檢測的程式碼有沒有異常都會執行') f.close()
# 主動觸發異常 print('===>1') print('===>2') raise TypeError('型別錯誤') print('===>3') class People: def __init__(self,name,age): self.__name=name self.__age=age def tell_info(self): print(self.__name,self.__age) def set_info(self,name,age): if not isinstance(name,str): raise TypeError('名字必須是str型別') if not isinstance(age,int): raise TypeError('年齡必須是int型別') self.__name=name self.__age=age obj=People('egon',18) # print(obj.__dict__) # obj.tell_info() obj.set_info('egon',123) obj.tell_info()
#自定義異常型別 class MyException(BaseException): def __init__(self,msg): super().__init__() self.msg=msg def __str__(self): return '<%s>' %self.msg raise MyException('我自定義的異常')