3
我有一個包含兩個Python函數run()和dudt(u,t,...)的代碼。運行調用一個C函數odepack_odeint,它調用一個調用另一個C函數的Fortran子例程LSODA,ode_function調用dudt。如果dudt中有錯誤,可以使用PyErr_Print()通過ode_function打印,但我無法弄清楚如何告訴代碼停止執行。我試過了,在Python C API代碼中引發異常並暫停執行
PyErr_Print()
PyErr_SetString(errobj, message)
in ode_function,但後來代碼段錯誤。據我瞭解,接下來應該發生的是ode_function返回NULL或-1或其他東西。但是,LSODA預計ode_function是無效的。
這是一個嘗試修補scipy.integrate.odeint,基於我以前問過的this question。