numpy.seterr#

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

设置如何处理浮点错误。

请注意,整数标量类型(如 int16)上的操作像浮点一样处理,并受这些设置的影响。

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

一次设置所有类型的浮点错误的处理方式

  • ignore:当异常发生时不采取任何操作。

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

  • raise:引发一个 FloatingPointError

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

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

  • log:在 seterrcall 指定的日志对象中记录错误。

默认是不更改当前行为。

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

除以零的处理方式。

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

浮点溢出的处理方式。

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

浮点下溢的处理方式。

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

无效浮点运算的处理方式。

返回值:
old_settingsdict

包含旧设置的字典。

参见

seterrcall

为“call”模式设置回调函数。

geterrgeterrcallerrstate

备注

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

  • 除以零:从有限数字获得无限结果。

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

  • 下溢:结果非常接近于零,以至于丢失了一些精度。

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

示例

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