函数(1)--返回异常
2018-05-01 本文已影响0人
小懒额
第14条:尽量用异常来表示特殊情况,而不要返回 None
在 python 编程时,如果一个函数的返回结果和 False 等效,那么就容易造成运算结果和函数过程异常的混淆,如:
def divide(a, b):
try:
return a / b
except ZeroDivisionError:
return None
result = divide(x, y)
if not result:
print('Invalid inputs')
这里的函数在做除法运算时,如果分母为 0 时,会进入 ZeroDivisionError 异常,然后返回 None,似乎是可以正常使用的。但是如果分子为 0 时,运算结果为 0,if not 语句判断成立,这时认为时由于不合法输入导致的。
最好的做法是抛异常到上一级,让调用者无法偷懒,如:
def divide(a, b):
try:
return a / b
except ZeroDivisionError as e:
raise ValueError('Invalid inputs') from e
x, y = 5, 2
try:
result = divide(x, y)
except ValueError:
print('Invalid inputs')
else:
print('Result is %1.f' % result)
这样如果函数运算出错,或者不合法,直接作为异常抛出,让调用者不得不进行处理,而不是简单地 if not 语句判断。