在pythoncapicod中引发异常并停止执行

2024-09-28 21:49:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码有两个Python函数,run()和dudt(u,t,…)。run调用一个C函数odepack_odeint,它调用Fortran子例程LSODA,后者调用另一个C函数ode_function,后者调用dudt。如果dudt中有错误,可以使用PyErr_Print()由ode_函数打印它,但我不知道如何告诉代码停止执行。我试过了

PyErr_Print()
PyErr_SetString(errobj, message)

在ode_函数中,但是代码segfaults。据我所知,接下来要做的是让ode_函数返回NULL或-1或其他值。然而,LSODA期望ode_函数无效。在

这是一个修补程序的尝试scipy.integrate.odeint,基于我之前问过的this question。在


Tags: 函数run代码错误function例程odeprint
1条回答
网友
1楼 · 发布于 2024-09-28 21:49:07

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

相关问题 更多 >