在对 scipy.integrate.odeint 的调用中评估导数时是否有合理的方法来处理异常?
如果在紧密循环中调用积分器,则此问题变得很重要,并且由于某种原因您需要停止执行。目前,我已经求助于转换KeyboardInterrupt
为SystemExit
异常(见下文)以使进程退出,这很好,但显然不理想。
scipy.integrate 绑定和 Fortran 代码似乎正在对 odepack.error 进行一些操作,但我不确定这些异常是否会传播到 Python 中。
from scipy.integrate import odeint
import numpy
import sys
import time
def derivative_faststop(func):
def impl(*args, **kwargs):
try:
return func(*args, **kwargs)
except KeyboardInterrupt:
print sys.exc_info()
sys.exit(1)
return impl
@derivative_faststop
def f(x, t):
# NB. the sleep is only present to model the real system
time.sleep(0.5)
return [1.0]
ts = numpy.linspace(0.00, 1.0, 11)
print odeint(f, [0.0], ts)