編寫(xiě)高質(zhì)量Python代碼的59個(gè)有效方法 第2章 函數(shù) 第14條:盡量用異常來(lái)表示特殊情況,而不要返回None

定義一個(gè)求商函數(shù),要點(diǎn)是分母不能為0:

def divide(a, b):
    try:
        return a/b
    except ZeroDivisionError as e:
        return None

人們這樣調(diào)用這個(gè)函數(shù):

result = divide(x, y)
if not result:
    print("Invalid inputs")
else:
    print(result)

這個(gè)函數(shù)的缺陷在于當(dāng)分子為0時(shí),本應(yīng)輸出為0的result被判斷為False而輸出Invalid inputs


另一種寫(xiě)法:

def divide(a, b):
    try:
        return a/b
    except ZeroDivisionError as e:
        raise ValueError("Invalid inputs") from e

為了應(yīng)對(duì)這種拋出異常的函數(shù)(拋出異常應(yīng)寫(xiě)入開(kāi)發(fā)文檔),調(diào)用者就不會(huì)像上面一樣調(diào)用了

try:
    result = divide(x, y)
except ValueError:
    print("Invalid inputs")
else:
    print(result)

要點(diǎn):

  • 用None表示返回值容易使調(diào)用者犯錯(cuò),因?yàn)镹one、0、空字符串在條件表達(dá)式里都為False。
  • 函數(shù)遇到特殊情況時(shí),應(yīng)拋出異常,而不要返回None,調(diào)用者看到文檔中所描述的異常后,就會(huì)編寫(xiě)相應(yīng)的代碼來(lái)處理它們了。
    wtx
最后編輯于
?著作權(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)容