を使用して Fortran で Python モジュールを作成していf2py
ます。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
この非常に単純なプログラムは1
、 の各要素に追加しますa
。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 コードは続行されません。