comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » CONTINUE from function within loop
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: CONTINUE from function within loop [message #86484 is a reply to message #86479] Wed, 13 November 2013 07:21 Go to previous messageGo to previous message
spluque is currently offline  spluque
Messages: 33
Registered: September 2013
Member
On Tuesday, November 12, 2013 11:40:34 PM UTC-6, Craig Markwardt wrote:
> On Wednesday, November 13, 2013 12:19:43 AM UTC-5, Sebastian Luque wrote:
>
>> Hi,
>
>>
>
>>
>
>>
>
>> I read the CATCH and ON_ERROR help pages, but I can't see how to handle the following situation. Say we have a FOR loop where a function is called for each iteration:
>
>>
>
>>
>
>>
>
>> FOR i=0, 10 DO BEGIN
>
>>
>
>> print, myfun(i)
>
>>
>
>> ENDFOR
>
>>
>
>>
>
>>
>
>> I would like MYFUN to continue with the next iteration if it runs into an error. Naively, this should show what I'm looking for:
>
>>
>
>>
>
>>
>
>> FUNCTION MYFUN, X
>
>> [BODY]
>
>> IF [condition] THEN BEGIN
>
>> message, 'A problem with X', /informational
>
>> CONTINUE
>
>> ENDIF
>
>> [REST IF OK]
>
>> RETURN, [something]
>
>> END
>
>>
>
>> But, of course, CONTINUE only works within an FOR/ENDFOR block, not this way. How does one accomplish this?
>
>
>
> You're right, because CONTINUE only works within the same lexical scope.
>
>
>
> You could do this by putting a CATCH within your main loop, which will catch your MESSAGE within MYFUN. That's a little dangerous because it will catch *every* error though.
>
>
>
> A better practice is to return a separate status variable MYFUN indicating success or failure, and have the main loop check the variable and decide what to do.
>
>
>
> Something like this...
>
> function myfun, x, status=status
>
> status = -1
>
> ;; Failure case
>
> if [condition] then return, !values,d_nan
>
> [ rest of MYFUN ]
>
> ;; Success case
>
> status = 1
>
> return, [something]
>
> end
>
>
>
> for i = 0, 10 do begin
>
> y = myfun(x, status=status)
>
> if status LT 0 then continue
>
> print, y
>
> endfor
>

This is a very clean solution!

Thanks,
Seb
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Previous Topic: covariance matrix
Next Topic: how to make lat/long grid for MODIS in IDL

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Sat Oct 11 03:07:20 PDT 2025

Total time taken to generate the page: 0.72171 seconds