मैं f2py
का उपयोग कर फोरट्रान में एक पायथन मॉड्यूल बना रहा हूं। अगर मैं फोरट्रान मॉड्यूल में कोई त्रुटि आती है तो मैं पाइथन प्रोग्राम में एक त्रुटि (त्रुटि संदेश सहित) उत्पन्न करना चाहता हूं।f2py का उपयोग कर पाइथन कोड (फोरट्रान) मॉड्यूल त्रुटि रोकें?
फोरट्रान कोड (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)
शून्य के बराबर है तो एक त्रुटि उत्पन्न करनी चाहिए। साथ अजगर कोड:
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]
लेकिन मैं अजगर कार्यक्रम त्रुटि पर पकड़ करना चाहते हैं। कृपया मदद करे।
उत्तर
फोरट्रान में stop
आदेश वास्तव में ऐसा करता है। अद्यतन फोरट्रान कोड पर विचार करें:
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
अर्थात पाइथन कोड त्रुटि के बाद जारी नहीं है।
क्या आप फोरट्रान मॉड्यूल से पाइथन अपवाद बढ़ाने की कोशिश कर रहे हैं? – user2357112
हां यह वही है जो मैं –
करने की कोशिश कर रहा हूं, एक तरीका फोरट्रान से एक त्रुटि कोड को फिर से चालू करना होगा, इसे पायथन पक्ष में जांचें, और त्रुटि होने पर अपवाद उठाएं। –