日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python實現(xiàn)自定義異常實例_python

作者:繁華似錦Fighting ? 更新時間: 2022-04-08 編程語言

前言

在Python中,拋出自定義異常的語法為 raise 異常類對象。也就是說可以使用 raise 語句來拋出異常, raise語句后需要跟一個異常類或異常類的實例。

1、使用 raise?語句來拋出異常

需求:定義一個求和方法

(1)拋出異常類

def add(a, b):
    # 如果a和b中有負(fù)數(shù),就向調(diào)用處拋出異常
    if a < 0 or b < 0:
        # raise用于向外部拋出異常,后邊可以跟一個異常類,或異常類的實例
        # 此時返回一個異常類
        raise Exception
    # 正常計算并返回結(jié)果
    r = a + b
    return r


print(add(-123, 456))

結(jié)果如下圖:可以看到?jīng)]有異常描述信息

(2)拋出異常類的實例

def add(a, b):
    # 如果a和b中有負(fù)數(shù),就向調(diào)用處拋出異常
    if a < 0 or b < 0:
        # raise用于向外部拋出異常,后邊可以跟一個異常類,或異常類的實例
        # 此時返回一個異常類的實例
        raise Exception("傳入的參數(shù)不能有負(fù)數(shù)。")
    # 正常計算并返回結(jié)果
    r = a + b
    return r


print(add(-123, 456))

結(jié)果如下圖:

2、自定義異常類

自定義異常類,只需要創(chuàng)建一個類繼承Exception即可。

(1)簡單實現(xiàn)

# 自定義異常類,只需要創(chuàng)建一個類繼承Exception即可
# 自定義異常類完全不用寫任何內(nèi)容
class MyError(Exception):
    pass

def add(a, b):
    # 如果a和b中有負(fù)數(shù),就向調(diào)用處拋出異常
    if a < 0 or b < 0:
        # raise用于向外部拋出異常,后邊可以跟一個異常類,或異常類的實例
        # 此時返回一個異常類的實例
        raise MyError("傳入的參數(shù)不能有負(fù)數(shù)。自定義的,這樣也行!")
    # 正常計算并返回結(jié)果
    r = a + b
    return r


print(add(-123, 456))

結(jié)果如下圖:

(2)完整實現(xiàn)

需求:密碼長度不足,則報異常(用戶輸入密碼,如果輸入的長度不足3位,則報錯,即拋出自定義異常,并捕獲該異常)。

# 自定義異常類,繼承Exception
class ShortInputError(Exception):
    def __init__(self, length, min_len):
        # 用戶輸入的密碼長度
        self.length = length
        # 系統(tǒng)要求的最少長度
        self.min_len = min_len

    # 設(shè)置拋出異常的描述信息
    def __str__(self):
        return f'你輸入的長度是{self.length}, 不能少于{self.min_len}個字符'


def main():
    # 2. 拋出異常: 嘗試執(zhí)行:用戶輸入密碼,如果長度小于3,拋出異常
    try:
        con = input('請輸入密碼:')
        if len(con) < 3:
            # 拋出異常類創(chuàng)建的對象
            raise ShortInputError(len(con), 3)
    # 3. 捕獲該異常
    except Exception as result:
        print(result)
    else:
        print('密碼已經(jīng)輸入完成')


main()

總結(jié)

原文鏈接:https://www.cnblogs.com/liuyuelinfighting/p/15845859.html

欄目分類
最近更新