五、異常

異常:就是錯(cuò)誤

(一)捕獲異常
                try:#有與沒(méi)有一樣
                    可能出錯(cuò)的代碼#如果出錯(cuò),則執(zhí)行except:內(nèi)容,否則不執(zhí)行
                except 異常1:
                    處理方式
                except 異常2:
                    處理方式
                ...
            ********************************
            (1)#捕獲單個(gè)異常
            try:
                print(abc)
            except NameError:
                print("沒(méi)有定義變量")
            (2)#捕獲多個(gè)異常
            try:
                print(abc)
                open("abc.txt")
            except (FileNotFoundError,NameError):
            #多個(gè)異常python3需要用元組方式填寫(xiě)異常名字
            #python2與python3有區(qū)別,2不用加()
                print("沒(méi)有。。。")
            (3)#獲得系統(tǒng)默認(rèn)異常基本信息
            try:
                print(abc)
            except NameError as ffff:#ffff變量相當(dāng)于狗,存儲(chǔ)系統(tǒng)異常默認(rèn)基本信息
                print("沒(méi)有。。。")
                print(ffff)------>打印系統(tǒng)默認(rèn)異常
            ************************************    
            try:
                print(abc)
            except (NameError,FileNotFoundError) as ffff:
                print("沒(méi)有。。。")
                print(ffff)------>打印系統(tǒng)默認(rèn)異常
            (4)#捕獲所有異常
                方式1:獲取所有的異常
                    try:
                        print(abc)
                    except :
                        print("捕獲到異常")
                方式2:獲取所有的異常,并保存系統(tǒng)異常
                    try:
                        print(abc)
                    except Exception as result:#Exception是所有異常類的基類
                        print(result)
            (5)else組合
                    try:
                        pass
                    except Exception as error:#try中有異常,捕獲異常后做這件事
                        pass
                    else: #try中沒(méi)有異常再做這件事
                        pass
            (6)try ... finally 組合
                    try:
                        pass
                    except Exception as e:#捕獲異常做這件事
                        pass
                    else:#沒(méi)有異常做這件事
                        pass
                    finally:#不管啥情況,都執(zhí)行
                        pass
        (二)異常的傳遞
                def test1():
                    print("-------1--1---------")
                    print(num)
                    print("-------1--2---------")
                def test2():
                    print("-------2--1---------")
                    test1()
                    print("-------2--2---------")
                def test3():
                    try:
                        print("-------3--1---------")
                        test2()
                        print("-------3--2---------")
                    except Exception as e:
                        print("捕獲到了異常")
                test3()#出現(xiàn)異常,層層傳遞,直到捕獲異常
        (三)拋出自定義的異常
                class Test(Exception):
                    def __init__(self,length,atleast)
                        self.length = length
                        self.atleast = atleast
                try:
                    raise Test(1,2)#raise + 拋出Exception子類的對(duì)象
                except Test as result:#result 相當(dāng)于Test(1,2)對(duì)象
                    print("---異常---")
                    print(result.length)----->1
        (四)異常處理中拋出異常(思想)                    
                class Test(object):
                    def __init__(self, switch):
                        self.switch = switch #開(kāi)關(guān)
                    def calc(self, a, b):
                        try:
                            return a/b
                        except Exception as result:
                            if self.switch:
                                print("捕獲開(kāi)啟,已經(jīng)捕獲到了異常,信息如下:")
                                print(result)
                            else:
                      #重新拋出這個(gè)異常,此時(shí)就不會(huì)被這個(gè)異常處理給捕獲到,從而觸發(fā)默認(rèn)的異常處理
                                raise#拋出異常
                a = Test(True)
                a.calc(11,0)
                print("---------華麗的分割線----------")
                a.switch = False
                a.calc(11,0)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容