当除以z时,获取FloatingPointError而不是zero divisionerror

2024-04-25 22:05:50 发布

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

我正在用Python运行一个非常耗时的后处理程序,遇到了一个FloatingPointError的地方,而我正期待着一个ZeroDivisionError。在

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

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

但是,我得到了以下错误:

^{pr2}$

为什么我会得到这个错误?在


Tags: 代码处理程序地方错误abs语句可能性try
1条回答
网友
1楼 · 发布于 2024-04-25 22:05:50

这将发生在以下情况:

  • 你用的是numpy
  • 您将divisionerror state设置为error。在

既然您已经声明您已经从一个数组中获取了这个数字,那么这些可能是numpy版本。您可以用^{}检查错误状态。您可能在代码中的某个地方调用了numpy.seterr()或{},或者您正在使用的库has。在

例如,您可以获得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将改为{}。注意,numpy对象永远不会导致ZeroDivisionError。如果您有错误状态divide='ignore'divide='warn',那么a / 0的结果将是inf,而{}的结果将是{}。在

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

相关问题 更多 >