上一主题

numpy.setbufsize

下一主题

numpy.seterrcall

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指定的Log对象中记录错误。

默认不是改变当前行为。

divide:{'ignore','warn','raise','call','print','log'}

除以零的处理。

over:{'ignore','warn','raise','call','print','log'}

浮点溢出的处理。

下:{'ignore','warn','raise','call','print','log'}

浮点下溢的处理。

无效:{'ignore','warn','raise','call','print','log'}

无效浮点运算的处理。

返回:

old_settings:dict

包含旧设置的字典。

也可以看看

seterrcall
为“呼叫”模式设置回调函数。

geterrgeterrcallerrstate

笔记

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

  • 除以零:从有限数字获得的无限结果。
  • 溢出:结果太大,无法表达。
  • 下溢:结果接近零,一些精度丢失。
  • 操作无效:结果不是可表达的数字,通常表示生成了NaN。
[R281]http://en.wikipedia.org/wiki/IEEE_754

例子

>>> old_settings = np.seterr(all='ignore')  #seterr to known value
>>> np.seterr(over='raise')
{'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore',
 'under': 'ignore'}
>>> np.seterr(**old_settings)  # reset to default
{'over': 'raise', 'divide': 'ignore', 'invalid': 'ignore', 'under': 'ignore'}
>>> np.int16(32000) * np.int16(3)
30464
>>> 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
>>> old_settings = np.seterr(all='print')
>>> np.geterr()
{'over': 'print', 'divide': 'print', 'invalid': 'print', 'under': 'print'}
>>> np.int16(32000) * np.int16(3)
Warning: overflow encountered in short_scalars
30464