Python實現(xiàn)自定義異常實例
前言
在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é)
到此這篇關(guān)于Python實現(xiàn)自定義異常實例的文章就介紹到這了,更多相關(guān)Python自定義異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Python+PyQt5實現(xiàn)簡易瀏覽器的實戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于如何利用Python+PyQt5實現(xiàn)簡易瀏覽器的相關(guān)資料,Qt 的主要優(yōu)勢是可以開發(fā)跨平臺的圖形界面程序,基于 Qt 的應(yīng)用能夠借助于各平臺的原生性在不同類的設(shè)備上運(yùn)行,而無須修改任何代碼庫,需要的朋友可以參考下2021-07-07
python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例,需要的朋友可以參考下2020-03-03

