我需要在python中调用fortran代码。有时在fortran计算中会产生错误,并使用命令STOP处理它,它会完全停止fortran和python代码。但是,我需要python继续运行。有没有其他命令停止fortran代码不会影响python?
答案 0 :(得分:3)
在你的情况下,我会使用一些状态变量和return
,对于子程序,这看起来像
subroutine mySqrt(number, res, stat)
implicit none
real,intent(in) :: number
real,intent(out) :: res
integer,intent(out) :: stat
if ( number < 0.e0 ) then
stat = -1 ! Some arbitrary number
return ! Exit
endif
res = sqrt(number)
stat = 0
end subroutine
对于函数来说这有点困难,但你可以通过全局(模块)变量解决这个问题,但这不是线程安全的(在这个版本中):
module test
integer,private :: lastSuccess
contains
function mySqrt(number)
implicit none
real,intent(in) :: number
real :: mySqrt
if ( number < 0.e0 ) then
lastSuccess = -1 ! Some arbitrary number
mySqrt = 0. ! Set some values s.t. the function returns something
return ! Exit
endif
mySqrt = sqrt(number)
lastSuccess = 0
end function
function checkRes()
implicit none
integer :: checkRes
checkRes = lastSuccess
end function
end module test
这样,您首先评估该函数,然后可以检查它是否成功。不需要stop
。您甚至可以使用不同的错误代码。
另一种方式(没有内部变量)将设置难以置信的结果(如此处为负数),并在Python代码中检查它。