我在 Python 中运行一个非常耗时的后处理器,遇到了一个FloatingPointError
,我期待ZeroDivisionError
。
我的代码在try
except
语句中捕获了ZeroDivisionError
的可能性:
try: a = b / abs(c)
except ZeroDivisionError: a = 'divZero'
但是,我收到以下错误:
FloatingPointError: divide by zero encountered in divide
为什么会出现此错误?
如果出现以下情况,就会发生这种情况:
- 您正在使用 numpy,并且
- 您的错误状态设置为
division
error
。
既然你已经声明你已经从数组中获取了数字,那么这些很可能是 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
如果b
和c
是 numpy 整数而不是浮点数,则将float_scalars
改为short_scalars
。 请注意,numpy 对象永远不会导致ZeroDivisionError
。 如果错误状态为divide='ignore'
或divide='warn'
,则a / 0
的结果将inf
,a // 0
的结果将0
。
虽然我无法重现您的确切错误消息,但这可能是由于numpy
的不同版本(我在 1.14.5 上(。