函数(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 语句判断。

上一篇 下一篇

猜你喜欢

热点阅读