gpt4 book ai didi

python - 除以零时获取 FloatingPointError 而不是 ZeroDivisionError

转载 作者:行者123 更新时间:2023-11-28 19:07:33 24 4
gpt4 key购买 nike

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

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

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

但是,我收到以下错误:

FloatingPointError: divide by zero encountered in divide

为什么我会收到此错误?

最佳答案

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

  • 您正在使用 numpy,并且
  • 你有一个 error state对于 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

如果 bc 是 numpy 整数而不是 float ,则 float_scalars 将改为 short_scalars。请注意,numpy 对象从不 导致ZeroDivisionError。如果您有错误状态 divide='ignore'divide='warn'a/0 的结果将是 infa//0 的结果将是 0

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

关于python - 除以零时获取 FloatingPointError 而不是 ZeroDivisionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45162478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com