python何时引发FloatingPointError?

DhK*_*hKo 9 python

Python文档说浮点计算失败时会引发FloatingPointError.但这里的"浮动计算"究竟是什么意思呢?我尝试使用浮点数进行添加,乘法和除法,但从未设法提出此特定错误.相反,我有一个TypeError:

10/'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'int' and 'str'
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解什么时候FloatingPointError在python中引发?

MSe*_*ert 13

它是该fpectl模块的一部分.的FloatingPointError,如果你不明确地打开它不应该被提出(fpectl.turnon_sigfpe()).

但请注意:

fpectl模块不是默认构建的,不鼓励使用它,除非在专家手中,否则可能很危险.有关fpectl-limitations更多详细信息,另请参阅限制部分.

更新:自Python 3.7起,fpectl模块已被删除.


即使启用了FloatingPointErrors,10/'a'也不会引发一个.它总会引发TypeError.只有在达到实际执行浮点数学运算的操作时才会引发FloatingPointError,例如1.0/0.0.10/'a'没有那么远.


ger*_*rit 6

您还可以通过设置适当的(或上下文管理器)标志来触发FloatingPointErrorinside 。对于从文档中获取的示例:numpynumpy.seterrnumpy.errstate

>>> np.sqrt(-1)
nan
>>> with np.errstate(invalid='raise'):
...     np.sqrt(-1)
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
FloatingPointError: invalid value encountered in sqrt
Run Code Online (Sandbox Code Playgroud)

FloatingPointError有趣的是,当所有操作数都是整数时它也会引发:

>>> old_settings = np.seterr(all='warn', over='raise')
>>> np.int16(32000) * np.int16(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FloatingPointError: overflow encountered in short_scalars
Run Code Online (Sandbox Code Playgroud)

FloatingPointError该文件指出了筹集资金的条件:

浮点异常在 IEEE 754 标准 [1] 中定义:

  • 除以零:从有限数得到无限结果。
  • 溢出:结果太大而无法表达。
  • 下溢:结果非常接近零,导致一些精度丢失。
  • 无效操作:结果不是可表达的数字,通常表明产生了 NaN。