numpy.seterr#

numpy.seterr(all=None, divide=None, over=None, under=None, invalid=None)[源代码]#

设置如何处理浮点数错误。

请注意,对整数标量类型(如 int16)的操作与浮点数类似,并且会受到这些设置的影响。

参数:
all{‘ignore’, ‘warn’, ‘raise’, ‘call’, ‘print’, ‘log’}, optional

一次性设置所有类型的浮点数错误的解决方法

  • ignore: 发生异常时,不执行任何操作。

  • warn: 打印一个 RuntimeWarning (通过 Python 的 warnings 模块)。

  • raise: 引发一个 FloatingPointError

  • call: 调用一个使用 seterrcall 函数指定的函数。

  • print: 直接将警告打印到 stdout

  • log: 将错误记录到由 seterrcall 指定的 Log 对象中。

默认情况下不改变当前行为。

divide{‘ignore’, ‘warn’, ‘raise’, ‘call’, ‘print’, ‘log’}, optional

处理除零错误。

over{‘ignore’, ‘warn’, ‘raise’, ‘call’, ‘print’, ‘log’}, optional

处理浮点数溢出。

under{‘ignore’, ‘warn’, ‘raise’, ‘call’, ‘print’, ‘log’}, optional

处理浮点数下溢。

invalid{‘ignore’, ‘warn’, ‘raise’, ‘call’, ‘print’, ‘log’}, optional

处理无效的浮点数运算。

返回:
old_settingsdict

包含旧设置的字典。

另请参阅

seterrcall

为 ‘call’ 模式设置一个回调函数。

geterr, geterrcall, errstate

备注

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

  • 除以零:有限数得到的无穷结果。

  • 溢出:结果过大,无法表示。

  • 下溢:结果非常接近零,导致丢失精度。

  • 无效操作:结果不是可表示的数字,通常表示生成了 NaN。

并发注意事项: 请参阅 浮点数错误处理

示例

>>> import numpy as np
>>> orig_settings = np.seterr(all='ignore')  # seterr to known value
>>> np.int16(32000) * np.int16(3)
np.int16(30464)
>>> np.seterr(over='raise')
{'divide': 'ignore', 'over': 'ignore', 'under': 'ignore', 'invalid': 'ignore'}
>>> 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 scalar multiply
>>> old_settings = np.seterr(all='print')
>>> np.geterr()
{'divide': 'print', 'over': 'print', 'under': 'print', 'invalid': 'print'}
>>> np.int16(32000) * np.int16(3)
np.int16(30464)
>>> np.seterr(**orig_settings)  # restore original
{'divide': 'print', 'over': 'print', 'under': 'print', 'invalid': 'print'}