避免被z分割的策略

2024-04-25 22:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中有避免ZeroDivisionError的最佳实践吗?例如,考虑以下函数:

def division (x,y):
    return x / y

在这个函数中,如果y被设置为0,则ZeroDivisionError被提升。一种策略是用y+1替换除法的分母,因此函数是:

def division (x,y):
    return x / (y+1)

或者,如果分母为零,则另一种策略可以返回nan值:

def division (x,y):
    if y == 0:
       return np.nan
    else:
       return x / y

以上策略的缺点是什么?有没有其他方法可以避免ZeroDivisionError?对于这个问题,异常处理也是一种流行的解决方案,但我更多的是寻找预防策略,而不是干预。你知道吗


Tags: 方法函数returnifdefnpnan解决方案
3条回答

请记住,numpy.true_divide()永远不会返回ZeroDivisionError。返回inf。你知道吗

a = [1,2,3]
b = [0,1,2]
np.true_divide(a, b)
 RuntimeWarning: divide by zero encountered in true_divide

array([inf, 2. , 1.5])

add-one策略的缺点是,如果y是一个小数字(不是-1),那么结果将非常不正确。只有当y非常大时才起作用。你知道吗

返回NaN的缺点是您需要为调用您函数的人清楚地记录这一点。np.nan会让打电话的人大吃一惊。例如,当您进行类似division(1, 0) == division(2,0)的比较时,期望得到什么

提出错误是正确的做法,让调用者按照他们的规则处理。你知道吗

这遵循相同的调节策略,但您可以使用以下方法:

def division(x, y):
    return x/y if y else 0

相关问题 更多 >