Tôi đang tạo mô-đun Python ở Fortran bằng cách sử dụng f2py
. Tôi muốn tạo ra một lỗi (bao gồm cả thông báo lỗi) trong chương trình Python nếu một lỗi gặp phải trong mô-đun Fortran. Hãy xem xét ví dụ sau:Ngừng mã python trong (Fortran) lỗi mô-đun bằng cách sử dụng f2py?
mã 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
chương trình rất đơn giản này cho biết thêm 1
để mỗi phần tử của a
. Nhưng sẽ tạo ra lỗi nếu a(i)
bằng không. Mã Python đi kèm:
import test
print test.foo(np.array([1,2],dtype='uint32'))
print test.foo(np.array([0,2],dtype='uint32'))
Kết quả bây giờ là:
[2 3]
ERROR HERE..?
[1 3]
Nhưng Tôi muốn chương trình Python để giữ trên lỗi. Hãy giúp tôi.
trả lời
Lệnh stop
trong Fortran không chính xác này. Xem xét các mã Fortran Cập nhật:
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
Kết quả bây giờ là:
[2 3]
Error from Fortran
Tức là mã Python không tiếp tục sau khi lỗi.
Bạn đang cố gắng tăng ngoại lệ Python từ mô-đun Fortran? – user2357112
Có điều này là chính xác những gì tôi đang cố gắng để làm –
Một cách sẽ là để retutn một mã lỗi từ Fortran, kiểm tra xem nó ở phía python, và nâng cao một ngoại lệ nếu lỗi xảy ra. –