除以零时获取浮点错误而不是零除法错误



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

我的代码在tryexcept语句中捕获了ZeroDivisionError的可能性:

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

但是,我收到以下错误:

FloatingPointError: divide by zero encountered in divide

为什么会出现此错误?

如果出现以下情况,就会发生这种情况:

  • 您正在使用 numpy,并且
  • 您的错误状态设置为divisionerror

既然你已经声明你已经从数组中获取了数字,那么这些很可能是 numpy 版本。 您可以使用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是 numpy 整数而不是浮点数,则将float_scalars改为short_scalars。 请注意,numpy 对象永远不会导致ZeroDivisionError。 如果错误状态为divide='ignore'divide='warn',则a / 0的结果将infa // 0的结果将0

虽然我无法重现您的确切错误消息,但这可能是由于numpy的不同版本(我在 1.14.5 上(。

最新更新