Я создаю модуль Python в Фортране, используя f2py
. Я хочу получить ошибку (включая сообщение об ошибке) в программе Python, если в модуле Fortran обнаружена ошибка. Рассмотрим следующий пример:Остановить код python в (Fortran) с помощью f2py?
код 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 держать на ошибку. Пожалуйста помоги.
Ответ
stop
команды в Fortran делает именно это. Рассмотрим обновленный 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 не будет продолжен после ошибки.
Вы пытаетесь поднять исключение Python из модуля Fortran? – user2357112
Да, это именно то, что я пытаюсь сделать. –
Одним из способов было бы переустановить код ошибки из Fortran, проверить его на стороне python и вызвать исключение, если возникла ошибка. –