我想在单个函数内更改numpy的浮点错误处理。
典型示例:
import numpy as np
def f():
np.seterr(all='raise')
# Do some other stuff
print(np.seterr())
# {'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
f()
print(np.seterr())
# {'divide': 'raise', 'over': 'raise', 'under': 'raise', 'invalid': 'raise'}
我希望对f
的调用不会更改np.seterr()
的输出,我不知道该怎么做。
感谢您的帮助!
答案 0 :(得分:3)
使用numpy.errstate
上下文管理器临时更改浮点错误处理:
def f():
with numpy.errstate(all='raise'):
...
请注意,尽管这是一个临时更改,但在线程和协程中仍然是全局的。在撰写本文时,NumPy还没有提供针对线程本地或基于contextvars
的错误设置的选项。
答案 1 :(得分:1)
我认为您可以通过在函数结束时重置错误的处理方式来实现此目标,即:
def f():
err = np.geterr()
np.seterr(all='raise')
try:
# do stuff
finally:
np.seterr(**err)