成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開(kāi)發(fā) 前端
今天給大家分享一些Python基礎(chǔ) (異常傳遞和自定義異常),我們一起來(lái)了解一下。

一、異常的傳遞

1. try嵌套中

import time


try:
    f = open('test.txt')
    try:
        while True:
            content = f.readline()
            if len(content) == 0:
                break
            time.sleep(2)
    finally:
        f.close()
        print('關(guān)閉文件')
except :
   print("沒(méi)有這個(gè)文件")
finally:
    print("最后的finally")


# 這是test.txt文件中讀取到信息

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

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

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




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




    def test3():
        try:
            print("----test3-1----")
            test1()
            print("----test3-2----")
        except Exception as result:
            print("捕獲到了異常,信息是:%s"%result)


        print("----test3-2----")




    test3()
    print("------華麗的分割線-----")
    test2()

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

小總結(jié):

  1. 如果try嵌套,那么如果里面的try沒(méi)有捕獲到這個(gè)異常,那么外面的try會(huì)接收到這個(gè)異常,然后進(jìn)行處理,如果外邊的try依然沒(méi)有捕獲到,那么再進(jìn)行傳遞。
  2. 如果一個(gè)異常是在一個(gè)函數(shù)中產(chǎn)生的,例如函數(shù)A---->函數(shù)B---->函數(shù)C,而異常是在函數(shù)C中產(chǎn)生的,那么如果函數(shù)C中沒(méi)有對(duì)這個(gè)異常進(jìn)行處理,那么這個(gè)異常會(huì)傳遞到函數(shù)B中,如果函數(shù)B有異常處理那么就會(huì)按照函數(shù)B的處理方式進(jìn)行執(zhí)行;如果函數(shù)B也沒(méi)有異常處理,那么這個(gè)異常會(huì)繼續(xù)傳遞,以此類(lèi)推。。。如果所有的函數(shù)都沒(méi)有處理,那么此時(shí)就會(huì)進(jìn)行異常的默認(rèn)處理。

二、拋出自定義的異常

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

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

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


def main():
    try:
        s = input('請(qǐng)輸入 --> ')
        if len(s) < 3:
            # raise引發(fā)一個(gè)你定義的異常
            raise ShortInputException(len(s), 3) #自定義異常長(zhǎng)度為3。
            
    except ShortInputException as result:#x這個(gè)變量被綁定到了錯(cuò)誤的實(shí)例
      
        print('ShortInputException: 輸入的長(zhǎng)度是 %d,長(zhǎng)度至少應(yīng)是 %d'% (result.length, result.atleast))
    else:
        print('沒(méi)有異常發(fā)生.')


main()

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

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

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

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

三、異常處理中拋出異常

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)

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

四、總結(jié)

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

責(zé)任編輯:華軒 來(lái)源: Go語(yǔ)言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2021-06-21 06:32:04

Python異常傳遞s自定義異常

2021-06-16 10:03:37

Python案例分析Python基礎(chǔ)

2022-05-30 18:18:23

NoSQL數(shù)據(jù)庫(kù)

2024-12-26 16:49:20

Python字典元素

2021-06-30 10:01:09

Python字典代碼

2021-06-26 09:40:09

Python列表循環(huán)

2021-07-03 10:02:30

Python字符串瀏覽器

2023-06-15 10:11:08

JavaScript函數(shù)表達(dá)式

2018-10-22 12:50:20

CDN網(wǎng)絡(luò)內(nèi)容發(fā)布網(wǎng)絡(luò)

2021-05-15 09:18:04

Python進(jìn)程

2022-02-21 09:44:45

Git開(kāi)源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2024-05-10 13:46:36

Python進(jìn)制

2021-06-05 10:02:15

Python進(jìn)制數(shù)據(jù)類(lèi)型

2021-06-09 09:00:11

Python數(shù)據(jù)類(lèi)型基礎(chǔ)

2018-04-09 16:35:10

數(shù)據(jù)庫(kù)MySQLInnoDB

2021-01-07 11:10:47

關(guān)鍵字

2021-05-15 10:16:14

Python匿名函數(shù)

2024-04-17 13:21:02

Python匿名函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品中文在线 | 四虎影院免费在线播放 | 免费在线观看h片 | 精品久久久久久久久久久久久久 | 黄色国产在线播放 | 国产精品高清一区二区三区 | 国产91丝袜在线播放 | 亚洲欧美日韩在线 | 高清视频一区二区三区 | 国产一级视频在线观看 | 欧美男人的天堂 | 精品九九 | 91av在线免费观看 | 久久精品免费观看 | 色综合视频在线 | 久久久国产精品视频 | 妹子干综合 | 欧美aⅴ在线观看 | 国产美女在线播放 | 国产精品日产欧美久久久久 | 亚洲精品在线免费观看视频 | 欧美激情国产精品 | 欧美成年人网站 | 国产精品乱码一区二三区小蝌蚪 | 欧洲妇女成人淫片aaa视频 | 国产精品久久av | av天天看 | 国产精品久久久久久久久久久免费看 | 97人人超碰 | 日韩一区中文字幕 | 91久久 | 日本aa毛片a级毛片免费观看 | 国产91亚洲精品一区二区三区 | 中文二区 | 99久久免费精品视频 | 亚洲狠狠 | 精品视频一区在线 | 欧美一级在线免费 | 国产精品麻 | 真人女人一级毛片免费播放 | 欧美一级片 |