av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

一篇文章帶你弄懂Python異常傳遞和自定義異常

大家好,我是Go進(jìn)階者,今天給大家分享一些Python基礎(chǔ) (異常傳遞和自定義異常),上篇文章有說到:一篇文章帶你弄懂Python異常簡(jiǎn)介和案例分析,這篇文章一起來看看異常其他知識(shí)吧~

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括利通網(wǎng)站建設(shè)、利通網(wǎng)站制作、利通網(wǎng)頁制作以及利通網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,利通網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到利通省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、異常的傳遞

1. try嵌套中

 
 
 
 
  1. import time 
  2.  
  3. try: 
  4.     f = open('test.txt') 
  5.     try: 
  6.         while True: 
  7.             content = f.readline() 
  8.             if len(content) == 0: 
  9.                 break 
  10.             time.sleep(2) 
  11.     finally: 
  12.         f.close() 
  13.         print('關(guān)閉文件') 
  14. except : 
  15.    print("沒有這個(gè)文件") 
  16. finally: 
  17.     print("最后的finally") 
  18.  
  19. # 這是test.txt文件中讀取到信息 

運(yùn)行結(jié)果:

2. 函數(shù)嵌套調(diào)用中

 
 
 
 
  1. def test1(): 
  2.      print("----test1-1----") 
  3.      print(num) 
  4.      print("----test1-2----") 
  5.  
  6.  
  7.  def test2(): 
  8.      print("----test2-1----") 
  9.      test1() 
  10.      print("----test2-2----") 
  11.  
  12.  
  13.  def test3(): 
  14.      try: 
  15.          print("----test3-1----") 
  16.          test1() 
  17.          print("----test3-2----") 
  18.      except Exception as result: 
  19.          print("捕獲到了異常,信息是:%s"%result) 
  20.  
  21.      print("----test3-2----") 
  22.  
  23.  
  24.  test3() 
  25.  print("------華麗的分割線-----") 
  26.  test2() 

運(yùn)行結(jié)果:

小總結(jié):

如果try嵌套,那么如果里面的try沒有捕獲到這個(gè)異常,那么外面的try會(huì)接收到這個(gè)異常,然后進(jìn)行處理,如果外邊的try依然沒有捕獲到,那么再進(jìn)行傳遞。

如果一個(gè)異常是在一個(gè)函數(shù)中產(chǎn)生的,例如函數(shù)A---->函數(shù)B---->函數(shù)C,而異常是在函數(shù)C中產(chǎn)生的,那么如果函數(shù)C中沒有對(duì)這個(gè)異常進(jìn)行處理,那么這個(gè)異常會(huì)傳遞到函數(shù)B中,如果函數(shù)B有異常處理那么就會(huì)按照函數(shù)B的處理方式進(jìn)行執(zhí)行;如果函數(shù)B也沒有異常處理,那么這個(gè)異常會(huì)繼續(xù)傳遞,以此類推。。。如果所有的函數(shù)都沒有處理,那么此時(shí)就會(huì)進(jìn)行異常的默認(rèn)處理。

二、拋出自定義的異常

你可以用raise語句來引發(fā)一個(gè)異常。異常/錯(cuò)誤對(duì)象必須有一個(gè)名字,且它們應(yīng)是Error或Exception類的子類

下面是一個(gè)引發(fā)異常的例子:

 
 
 
 
  1. class ShortInputException(Exception): 
  2.     '''自定義的異常類''' 
  3.     def __init__(self, length, atleast): 
  4.         #super().__init__() 
  5.         self.length = length 
  6.         self.atleast = atleast 
  7.  
  8. def main(): 
  9.     try: 
  10.         s = input('請(qǐng)輸入 --> ') 
  11.         if len(s) < 3: 
  12.             # raise引發(fā)一個(gè)你定義的異常 
  13.             raise ShortInputException(len(s), 3) #自定義異常長(zhǎng)度為3。 
  14.              
  15.     except ShortInputException as result:#x這個(gè)變量被綁定到了錯(cuò)誤的實(shí)例 
  16.        
  17.         print('ShortInputException: 輸入的長(zhǎng)度是 %d,長(zhǎng)度至少應(yīng)是 %d'% (result.length, result.atleast)) 
  18.     else: 
  19.         print('沒有異常發(fā)生.') 
  20.  
  21. main() 

運(yùn)行結(jié)果:

以上程序中,關(guān)于#super().init()代碼的說明:

這一行代碼,可以調(diào)用也可以不調(diào)用,建議調(diào)用。

因?yàn)開_init__方法往往是用來對(duì)創(chuàng)建完的對(duì)象進(jìn)行初始化工作,如果在子類中重寫了父類的__init__方法,即意味著父類中的很多初始化工作沒有做,這樣就不保證程序的穩(wěn)定了,所以在以后的開發(fā)中,如果重寫了父類的__init__方法,最好是先調(diào)用父類的這個(gè)方法,然后再添加自己的功能。

三、異常處理中拋出異常

 
 
 
 
  1. class Test(object): 
  2.     def __init__(self, switch): 
  3.         self.switch = switch #開關(guān) 
  4.     def calc(self, a, b): 
  5.         try: 
  6.             return a/b 
  7.         except Exception as result: 
  8.             if self.switch: 
  9.                 print("捕獲開啟,已經(jīng)捕獲到了異常,信息如下:") 
  10.                 print(result) 
  11.             else: 
  12.                 #重新拋出這個(gè)異常,此時(shí)就不會(huì)被這個(gè)異常處理給捕獲到,從而觸發(fā)默認(rèn)的異常處理 
  13.                 raise 
  14.  
  15. a = Test(True) 
  16.  
  17. a.calc(11,0) 
  18.  
  19. print("----------------------華麗的分割線----------------") 
  20.  
  21. a.switch = False 
  22. a.calc(11,0) 

運(yùn)行結(jié)果:

四、總結(jié)

本文基于Python基礎(chǔ),詳細(xì)的講解了運(yùn)行過程中遇到各種異常,應(yīng)該采取什么樣的處理方式,對(duì)各種異常提供有效的解決方案。通過一個(gè)個(gè)小項(xiàng)目實(shí)際操作,運(yùn)行結(jié)果展示,能夠更好的解決問題。希望可以幫助你更好的學(xué)習(xí)Python。


分享文章:一篇文章帶你弄懂Python異常傳遞和自定義異常
當(dāng)前網(wǎng)址:http://uogjgqi.cn/article/dpjiihd.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流