Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python何时引发FloatingPointError?_Python - Fatal编程技术网

python何时引发FloatingPointError?

python何时引发FloatingPointError?,python,Python,Python文档指出,当浮点计算失败时,会引发FloatingPointError。但这里“浮动计算”的确切含义是什么? 我试着用浮点数进行加法、乘法和除法运算,但从来没有出现过这个特定的错误。相反,我得到了一个TypeError: 10/'a' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) fo

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'
10/'a'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:/:“int”和“str”的操作数类型不受支持
有人能帮我理解python中何时出现
FloatingPointError
吗?

它是模块的一部分。如果未显式打开(
fpectl.turnon\u sigfpe()
),则不应引发

但是请注意:

默认情况下,
fpectl
模块不是构建的,不鼓励使用它,除非在专家手中,否则可能会有危险。有关更多详细信息,请参见“限制”一节

更新:
fpectl
模块已被删除



即使启用了FloatingPointErrors,
10/'a'
也不会引发错误。它总是会引发类型错误。只有当操作达到实际执行浮点数学的程度时,才会引发FloatingPointError,如
1.0/0.0
10/'a'
没有那么远。

您还可以通过设置适当的(或上下文管理器)标志,在
numpy
中触发
FloatingPointError
。有关文档中的示例:

文档记录了将引发
FloatingPointError
的条件:

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

  • 零除:由有限数得到的无限结果
  • 溢出:结果太大,无法表示
  • 下溢:结果非常接近于零,以至于失去了一些精度
  • 无效操作:结果不是可表达的数字,通常表示生成了NaN

只是为了了解什么样的操作会失败。例如
1.0/0.0
之类的东西会引发异常(被零除)@sascha这将是一个
ZeroDivisionError
错误,尽管.@Ev.Kounis是一个有趣的设计决策。但是,你是对的!再想一想,如果您使用
fpectl.turn\u sigfpe
截取浮点算术“除零、溢出或无效操作”是(或可能是),我喜欢这个问题…@Ev.Kounis被转换成
FloatingPointError
。谢谢@Mseifert,但我没有理解它。如果我理解正确,这意味着除非我打开它,否则它永远不会被引发?@SudeahKrishna实际上任何人都可以手动引发错误。但是,如果python不是使用fpectl编译的,并且您手动设置了fpectl.open\u sigfpe()(即使这样,它也可能无法在您的计算机上运行,因为该模块高度特定于操作系统)。由于我甚至无法导入模块
fpect1
,如何使用
--使用-fpect1
编译它。我在CentOS6和Windows10上作为well@SudeahKrishna我假设您不能只编译
fpectl
模块,我假设您需要从源代码构建Python并使用
/configure--with fectl
>>> 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
>>> 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