3

我的代码有两个 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 进行修补的尝试。

4

1 回答 1

0

pv on this Github issue for Scipy解释了问题所在。简而言之,C 中的 setjump() 和 longjump() 原则上可以做到这一点,但这很容易出错,尤其是不是线程安全的。这可能在其他类似的应用程序中有用,但使用 f2py 通常是让 Fortran 代码与 Python 通信的更好方法。

于 2013-06-25T16:13:42.000 回答