欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python 異常處理

系統 1622 0

異常:

當Python檢測到?個錯誤時,解釋器就?法繼續執?了,會出現?些錯誤的提示,這就是所謂的"異常"。

看如下示例:

            
              print('-----test--1---')
open('123.txt','r')
print('-----test--2---')
            
          

打開?個不存在的?件123.txt,當找不到123.txt ?件時,就會拋出給我們?個IOError類型的錯誤,No such file or directory:123.txt (沒有123.txt這樣的?件或?錄)

?


異常處理

1. 捕獲異常 try...except...
看如下示例:

            
              try:
    print('-----test--1---')
    open('123.txt','r')
    print('-----test--2---')
except IOError:
    pass
            
          

說明:

  • 此程序看不到任何錯誤,因為?except 捕獲到了IOError異常,并添加了處理的?法
  • pass 表示實現了相應的實現,但什么也不做;如果把pass改為print語句,那么就會輸出其他信息

?總結:

  • 把可能出現問題的代碼,放在try中
  • 把處理異常的代碼,放在except中

?

2. except捕獲多個異常
看如下示例:

            
              try:
    print num
except IOError:
    print('產?錯誤了')

            
          

想?想: 上例程序,已經使?except來捕獲異常了,為什么還會看到錯誤的信息提示?

  • 答: except捕獲的錯誤類型是IOError,?此時程序產?的異常為 NameError ,所以except沒有?效

修改后的代碼為:

            
              try:
    print(num)
except NameError:
    print('產?錯誤了')
            
          

實際開發中,捕獲多個異常的?式,如下:

            
              try:
    print('-----test--1---')
    open('123.txt','r') # 如果123.txt?件不存在,那么會產? IOError 異常
    print('-----test--2---')
    print(num)# 如果num變量沒有定義,那么會產? NameError 異常
except (IOError,NameError):
    #  如果想通過?次except捕獲到多個異常可以??個元組的?式
            
          

注意:

  • 當捕獲多個異常時,可以把要捕獲的異常的名字,放到except 后,并使?元組的?式僅進?存儲

?

3. 獲取異常的信息描述

Python 異常處理_第1張圖片

?

4. 捕獲所有異常

Python 異常處理_第2張圖片

?

5. else
??????? 咱們應該對 else? 并不陌?,在if中,它的作?是當條件不滿?時執?的實?;同樣在try...except...中也是如此,即如果沒有捕獲到異常,那么就執?else中的事情。

            
              try:
    num = 100
    print num
except NameError as errorMsg:
    print('產?錯誤了:%s'%errorMsg)
else:
    print('沒有捕獲到異常,真?興')

            
          

運行結果如下:

Python 異常處理_第3張圖片



6. try...finally...
??????? ?論異常是否產?都要執? ,那么此時就需要使?finally。如?件關閉,釋放鎖,把數據庫連接返還給連接池等。
demo:

            
              import time
try:
    f = open('test.txt')
    try:
        while True:
            content = f.readline()
            if len(content) == 0:
                break
            time.sleep(2)
            print(content)
    except:
        #如果在讀取?件的過程中,產?了異常,那么就會捕獲到
        #?如 按下了 ctrl+c
        pass
    finally:
        f.close()
        print('關閉?件')

except:
    print("沒有這個?件")
            
          

說明:
??????? test.txt?件中每??數據打印,但是我有意在每打印??之前?time.sleep?法暫停2秒鐘。這樣做的原因是讓程序運?得慢?些。在程序運?的時候,按Ctrl+c中斷(取消)程序。
??????? 可以觀察到KeyboardInterrupt異常被觸發,程序退出。但是在程序退出之前,finally從句仍然被執?,把?件關閉。

?


異常的傳遞

1. try嵌套中

            
              import time
try:
    f = open('test.txt')
    try:
        while True:
            content = f.readline()
            if len(content) == 0:
                break
                time.sleep(2)
                print(content)
    finally:
            f.close()
            print('關閉?件')
except:
    print("沒有這個?件")
            
          

運?結果:

            
              ^C關閉?件
沒有這個?件
            
          

總結:

  • try嵌套時,如果??的try沒有捕獲到這個異常,那么外?的try會接收到這個異常,然后進?處理。
  • 如果外邊的try依然沒有捕獲到,那么再進?傳遞。。。


2. 函數嵌套調?中

            
              def test1():
    print("----test1-1----")
    print(num)
    print("----test1-2----")

def test2():
    try:
        print("----test2-1----")
        test1()
        print("----test2-2----")

    except:
        print("test2出現異常")
        print("----test2-3----")
        test2()
        print("------華麗的分割線-----")
            
          

總結
??????? 如果try嵌套,那么如果??的try沒有捕獲到這個異常,那么外?的try會接收到這個異常,然后進?處理,如果外邊的try依然沒有捕獲到,那么再進?傳遞。。。
??????? 如果?個異常是在?個函數中產?的,例如函數A---->函數B---->函數C,?異常是在函數C中產?的,那么如果函數C中沒有對這個異常進?處理,那么這個異常會傳遞到函數B中,如果函數B有異常處理那么就會按照函數B的處理?式進?執?;如果函數B也沒有異常處理,那么這個異常會繼續傳遞,以此類推。。。如果所有的函數都沒有處理,那么此時就會進?異常的默認處理,即通常到的那樣。


拋出自定義的異常

可以? raise語句來引發?個異常 。異常/錯誤對象必須有?個名字,且它們應是Error或Exception類的?類。
下?是?個引發異常的例?:

            
              class ShortInputException(Exception):
'''?定義的異常類'''
    def __init__(self, length, atleast):
        #super().__init__()
        self.length = length
        self.atleast = atleast

    def main():
        try:
            s = input('請輸? --> ')
            if len(s) < 3:
                # raise引發?個你定義的異常
                raise ShortInputException(len(s), 3)
        except ShortInputException as result:    #x這個變量被綁定到了錯誤的實例
            print('ShortInputException: 輸?的度是 %d,度?少應是 %d'% (result.length, result.atleast))
        else:
            print('沒有異常發?.')

main()

            
          

?

Python更多:https://blog.csdn.net/Scrat_Kong/article/details/90257118


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产1区在线观看 | 中文字幕 国产精品 | 国产福利91精品一区二区三区 | 一级特黄特黄毛片欧美的 | 国产剧情一区二区三区 | 亚洲欧美日韩中文综合在线不卡 | 日本三日本三级香港三级 | 中文线码中文高清播放中 | 一区二区三区毛A片特级 | 国产精品久久久久亚洲 | 欧美日韩在线观看视频 | 午夜大片免费男女爽爽影院久久 | 91免费国产 | 婷婷色婷婷| 中国一级大黄大黄大色毛片 | 久久亚洲日本不卡一区二区 | 老色鬼久久AV综合亚洲健身 | av免费不卡国产观看 | 天天拍拍夜夜出水 | 精品自拍视频 | 亚洲精品一区久久狠狠欧美 | 久久久久久国产精品视频 | 午夜国产精品无套 | 激情六月色 | 亚洲国产综合网 | 欧美激情一区二区三区视频高清 | 一区二区日韩 | 国产视频二 | 在线精品亚洲欧美日韩国产 | 粉嫩粉嫩一区二区三区在线播放 | 丝袜偷窥亚洲综合 | 成人性爱视频在线观看 | 国产精品成人av | 丝袜美腿一区二区三区动态图 | 日韩在线视频免费观看 | 亚洲精品在线视频观看 | 亚洲香蕉久久一区二区三区四区 | 亚洲精品国产综合一线久久 | jyzzjyzzjyzz日本在线观看 | 美女网站在线观看视频18 | 亚瑟天堂久久一区二区影院 |