除以零时获取FloatingPointError而不是ZeroDivisionError

时间:2017-07-18 09:17:54

标签: python floating-point division

我在Python中运行一个非常耗时的后处理器,遇到了FloatingPointError,我期待ZeroDivisionError

我的代码在ZeroDivisionError try声明中捕获了except的可能性:

try: a = b / abs(c) 
except ZeroDivisionError: a = 'divZero'

但是,我收到以下错误:

FloatingPointError: divide by zero encountered in divide

为什么我会收到此错误?

1 个答案:

答案 0 :(得分:0)

如果出现这种情况:

  • 您正在使用numpy和
  • division设置为error后,您error state

由于您已声明已从阵列中取出数字,因此看起来很可能是那些不合适的版本。您可以使用numpy.geterr()检查错误状态。您可能在代码中的某处或您正在使用的库中调用了numpy.seterr()numpy.errstate()

例如,您可以按如下方式获取FloatingPointError

In [22]: np.seterr(divide="raise")
Out[22]: {'divide': 'raise', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}

In [24]: b = np.float32(1)

In [25]: c = np.float32(0)

In [26]: a = b / c
---------------------------------------------------------------------------
FloatingPointError                        Traceback (most recent call last)
<ipython-input-26-809085b5049b> in <module>()
----> 1 a = b / c

FloatingPointError: divide by zero encountered in float_scalars

如果bc是整数而不是浮点数,float_scalars将是short_scalars。请注意,numpy对象永远不会导致ZeroDivisionError。如果您的错误状态为divide='ignore'divide='warn',则a / 0的结果将为inf,而a // 0的结果将为0

虽然我无法重现您的完全错误消息,但可能是因为numpy的不同版本(我在1.14.5上)。