三、自定義異常
自定義異常是在Python中創(chuàng)建新的異常類型的過(guò)程,這使得你可以定義特定于你的應(yīng)用程序或庫(kù)的錯(cuò)誤情況。自定義異常讓你能夠更清晰地表達(dá)錯(cuò)誤的含義,并且使得異常處理更加具有可讀性和可管理性。
3.1 自定義異常的創(chuàng)建
其實(shí),創(chuàng)建自定義異常類非常簡(jiǎn)單,通常你只需要繼承自Exception類(或者Python異常層次結(jié)構(gòu)中的任何其他類):
class MyCustomError(Exception):
""“基礎(chǔ)自定義異常類”""
def __init__(self, message):
super().__init__(message)
3.2 自定義異常的使用
一旦定義了自定義異常類,你就可以在代碼中使用raise關(guān)鍵字來(lái)拋出這個(gè)異常:
def divide(a, b):
if b == 0:
raise MyCustomError("分母不能為0")
return a / b
try:
divide(10, 0)
except MyCustomError as e:
print(f"發(fā)生了自定義錯(cuò)誤:{e}")
3.3 其他功能
自定義異?梢园~外的屬性和方法,以便在異常發(fā)生時(shí)傳遞更多的錯(cuò)誤上下文:
class InvalidInputError(Exception):
def __init__(self, input_value, message="無(wú)效的輸入"):
super().__init__(message)
self.input_value = input_value
try:
raise InvalidInputError(10, "輸入值不能為偶數(shù)")
except InvalidInputError as e:
print(f"錯(cuò)誤:{e},輸入的值是:{e.input_value}")
四、Assert斷言
4.1 什么是斷言
斷言(assert)是Python中的一種簡(jiǎn)單而強(qiáng)大的機(jī)制,用于設(shè)置代碼的檢查點(diǎn),確保程序在繼續(xù)執(zhí)行前滿足某些條件。如果條件為真,則程序繼續(xù)執(zhí)行;如果條件為假(即斷言失。瑒tPython拋出AssertionError異常。
基本語(yǔ)法
assert condition, "Error message"
condition:要檢查的條件,如果該條件為False,將引發(fā)異常。
"Error message":斷言失敗時(shí)顯示的錯(cuò)誤信息,它是可選的。
示例代碼
assert 2 + 2 == 4, "數(shù)學(xué)出錯(cuò)了!"
如果2 + 2不等于4,將拋出AssertionError,并且錯(cuò)誤信息將是"數(shù)學(xué)出錯(cuò)了!"。
4.2 什么時(shí)候用斷言
調(diào)試:在開(kāi)發(fā)過(guò)程中,斷言可以用來(lái)驗(yàn)證代碼的某些部分是否按預(yù)期工作。
def add(a, b):
assert isinstance(a, (int, float)) and isinstance(b, (int, float)), "參數(shù)必須是數(shù)字"
return a + b
add(1, 'a') # 這將引發(fā)AssertionError,因?yàn)榈诙䝼(gè)參數(shù)不是數(shù)字
契約編程:斷言可以作為函數(shù)契約的一部分,確保傳入的參數(shù)滿足特定的條件。
def divide(a, b):
assert b != 0, "分母不能為0"
return a / b
divide(10, 0) # 這將引發(fā)AssertionError,因?yàn)榉帜笧?
自動(dòng)化測(cè)試:在自動(dòng)化測(cè)試中,斷言用來(lái)驗(yàn)證測(cè)試用例的預(yù)期結(jié)果。
def factorial(n):
assert n >= 0, "輸入必須是非負(fù)整數(shù)"
if n == 0:
return 1
return n * factorial(n - 1)
# 測(cè)試factorial函數(shù)
assert factorial(5) == 120, "factorial測(cè)試失敗"
文檔:斷言可以作為文檔的一部分,說(shuō)明函數(shù)的預(yù)期行為和參數(shù)要求。
斷言是一種快速簡(jiǎn)單的方法來(lái)設(shè)置檢查點(diǎn),但它不應(yīng)該被用來(lái)處理正常的程序錯(cuò)誤。對(duì)于這些情況,應(yīng)該使用異常處理。