f2py是stop命令的同义词

时间:2013-10-18 13:09:05

标签: python fortran f2py

我需要在python中调用fortran代码。有时在fortran计算中会产生错误,并使用命令STOP处理它,它会完全停止fortran和python代码。但是,我需要python继续运行。有没有其他命令停止fortran代码不会影响python?

1 个答案:

答案 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代码中检查它。