定義一個(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