我的代码有两个 Python 函数,run() 和 dudt(u, t, ...)。run 调用一个 C 函数 odepack_odeint,它调用一个 Fortran 子例程 LSODA,它调用另一个 C 函数 ode_function,它调用 dudt。如果 dudt 有错误,可以通过 ode_function 使用 PyErr_Print() 打印,但我不知道如何告诉代码停止执行。我试过了,
PyErr_Print()
PyErr_SetString(errobj, message)
在 ode_function 中,但随后代码段错误。据我了解,接下来应该发生的是 ode_function 返回 NULL 或 -1 之类的。但是,LSODA 期望 ode_function 无效。
这是基于我之前提出的这个问题对 scipy.integrate.odeint 进行修补的尝试。