我在Python中运行一个非常耗时的后处理器,遇到了FloatingPointError
,我期待ZeroDivisionError
。
我的代码在ZeroDivisionError
try
声明中捕获了except
的可能性:
try: a = b / abs(c)
except ZeroDivisionError: a = 'divZero'
但是,我收到以下错误:
FloatingPointError: divide by zero encountered in divide
为什么我会收到此错误?
答案 0 :(得分:0)
如果出现这种情况:
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
如果b
和c
是整数而不是浮点数,float_scalars
将是short_scalars
。请注意,numpy对象永远不会导致ZeroDivisionError
。如果您的错误状态为divide='ignore'
或divide='warn'
,则a / 0
的结果将为inf
,而a // 0
的结果将为0
虽然我无法重现您的完全错误消息,但可能是因为numpy
的不同版本(我在1.14.5上)。