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'没有那么远.
您还可以通过设置适当的(或上下文管理器)标志来触发FloatingPointErrorinside 。对于从文档中获取的示例:numpynumpy.seterrnumpy.errstate
Run Code Online (Sandbox Code Playgroud)>>> 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
FloatingPointError有趣的是,当所有操作数都是整数时它也会引发:
Run Code Online (Sandbox Code Playgroud)>>> 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
FloatingPointError该文件指出了筹集资金的条件:
浮点异常在 IEEE 754 标准 [1] 中定义:
- 除以零:从有限数得到无限结果。
- 溢出:结果太大而无法表达。
- 下溢:结果非常接近零,导致一些精度丢失。
- 无效操作:结果不是可表达的数字,通常表明产生了 NaN。
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |