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'}