我是一个有用的助手,可以翻译文本。
我正在使用 f2py
用 Fortran 创建一个 Python 模块。如果在 Fortran 模块中遇到错误,我想在 Python 程序中生成错误(包括错误消息)。请考虑以下示例:
Fortran 代码 (test.f):
subroutine foo(a,m)
integer :: m,i
integer, dimension(m) :: a
!f2py intent(in) :: m
!f2py intent(in,out) :: a
!f2py intent(hide), depend(a) :: m=shape(a)
do i = 1,m
if ( a(i) .eq. 0 ) then
print*, 'ERROR HERE..?'
end if
a(i) = a(i)+1
end do
end subroutine
这个非常简单的程序将a
中的每个元素加上1
。但是如果a(i)
等于零,则应该产生错误。附带的Python代码:
import test
print test.foo(np.array([1,2],dtype='uint32'))
print test.foo(np.array([0,2],dtype='uint32'))
现在的输出为:
[2 3]
ERROR HERE..?
[1 3]
但我希望Python程序能够保留错误信息,请帮忙。
答案
Fortran中的stop
命令正好可以做到这一点。考虑使用更新后的Fortran代码:
subroutine foo(a,m)
integer :: m,i
integer, dimension(m) :: a
!f2py intent(in) :: m
!f2py intent(in,out) :: a
!f2py intent(hide), depend(a) :: m=shape(a)
do i = 1,m
if ( a(i) .eq. 0 ) then
print*, 'Error from Fortran'
stop
end if
a(i) = a(i)+1
end do
end subroutine
输出结果现在是:
[2 3]
Error from Fortran
即Python代码在错误发生后不会继续执行。