Sto creando un modulo Python in Fortran utilizzando f2py
. Vorrei produrre un errore (incluso il messaggio di errore) nel programma Python se si incontra un errore nel modulo Fortran. Si consideri il seguente esempio:Arresta il codice Python nell'errore del modulo (Fortran) usando f2py?
codice 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
Questo semplice programma aggiunge 1
a ciascun elemento di a
. Ma dovrebbe produrre un errore se a(i)
uguale a zero. Il codice Python di accompagnamento:
import test
print test.foo(np.array([1,2],dtype='uint32'))
print test.foo(np.array([0,2],dtype='uint32'))
L'uscita è ora:
[2 3]
ERROR HERE..?
[1 3]
Ma voglio il programma Python per tenere sull'errore. Per favore aiuto.
risposta
Il comando stop
in Fortran fa esattamente questo. Si consideri il codice Fortran aggiornamento:
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
L'uscita è ora:
[2 3]
Error from Fortran
Vale a dire il codice Python non continua dopo l'errore.
Stai cercando di generare un'eccezione Python da un modulo Fortran? – user2357112
Sì, questo è esattamente quello che sto cercando di fare –
Un modo sarebbe quello di ritirare un codice di errore da Fortran, controllarlo in python side e generare un'eccezione se si verifica un errore. –