Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > begin...rescue...retry next?

Reply
Thread Tools

begin...rescue...retry next?

 
 
Joe Ruby
Guest
Posts: n/a
 
      08-16-2006
Is there some way to do this in Ruby?

begin
# do stuff, uh-oh an exception gets raised
rescue
retry next
end

There's 'retry' which returns to the same statement that threw the
exception, but I'd like execution to resume at the next statement
following it.

Thanks,
Joe

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Max Muermann
Guest
Posts: n/a
 
      08-16-2006
> There's 'retry' which returns to the same statement that threw the
> exception, but I'd like execution to resume at the next statement
> following it.
>


not_tried_before = true
begin
do_dangerous_stuff if not_tried_before
rescue
not_tried_before = false
retry
end

Max

 
Reply With Quote
 
 
 
 
Logan Capaldo
Guest
Posts: n/a
 
      08-16-2006

On Aug 15, 2006, at 10:26 PM, Joe Ruby wrote:

> Is there some way to do this in Ruby?
>
> begin
> # do stuff, uh-oh an exception gets raised
> rescue
> retry next
> end
>
> There's 'retry' which returns to the same statement that threw the
> exception, but I'd like execution to resume at the next statement
> following it.
>
> Thanks,
> Joe
>
> --
> Posted via http://www.ruby-forum.com/.
>


If you know only expression X will raise the exception you can use
the modifier form

some_code
some_exception_raising_call rescue nil # This is evil
continue_blissfully_unaware_of_whether_an_exceptio n_was_raised

Also retry does not return to the statement that raised the
exception, it jumps to the begin

begin
# retry will put you here
some_code
some_more_code
raise_an_exception
even_more_code
rescue
retry
end


 
Reply With Quote
 
Joe Ruby
Guest
Posts: n/a
 
      08-16-2006
Logan Capaldo wrote:
> some_exception_raising_call rescue nil # This is evil


Why is that evil?

Joe

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Logan Capaldo
Guest
Posts: n/a
 
      08-16-2006

On Aug 16, 2006, at 12:41 AM, Joe Ruby wrote:

> Logan Capaldo wrote:
>> some_exception_raising_call rescue nil # This is evil

>
> Why is that evil?
>
> Joe
>
> --
> Posted via http://www.ruby-forum.com/.
>


Cause you can't specify which exceptions to catch with that form.
Someday something terrible could happen inside
some_exception_raising_call that you _do_ want to know about but
it'll just get thrown away by the rescue nil.


 
Reply With Quote
 
Justin Collins
Guest
Posts: n/a
 
      08-16-2006
Joe Ruby wrote:
> Logan Capaldo wrote:
>
>> some_exception_raising_call rescue nil # This is evil
>>

>
> Why is that evil?
>
> Joe
>


Because if something goes wrong in that call, you will get no
information about it. Won't even know it happened.

-Justin

 
Reply With Quote
 
Joe Ruby
Guest
Posts: n/a
 
      08-16-2006
Justin Collins wrote:
> Joe Ruby wrote:
>> Logan Capaldo wrote:
>>
>>> some_exception_raising_call rescue nil # This is evil
>>>

>>
>> Why is that evil?
>>
>> Joe
>>

>
> Because if something goes wrong in that call, you will get no
> information about it. Won't even know it happened.
>
> -Justin


Yeah, but rescue nil is just usually to deal with null values from the
database, for example, which isn't a big deal.

Joe

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Justin Collins
Guest
Posts: n/a
 
      08-16-2006
Joe Ruby wrote:
> Justin Collins wrote:
>
>> Joe Ruby wrote:
>>
>>> Logan Capaldo wrote:
>>>
>>>
>>>> some_exception_raising_call rescue nil # This is evil
>>>>
>>>>
>>> Why is that evil?
>>>
>>> Joe
>>>
>>>

>> Because if something goes wrong in that call, you will get no
>> information about it. Won't even know it happened.
>>
>> -Justin
>>

>
> Yeah, but rescue nil is just usually to deal with null values from the
> database, for example, which isn't a big deal.
>
> Jo


Using rescue this way will rescue all exceptions, but simply return nil.
Examples:

irb(main):001:0> puts a rescue nil
=> nil
irb(main):002:0> puts "asiodhasd".asdiajsd rescue nil
=> nil
irb(main):003:0> asdi.asdiojas.asidjas.asdihja.asdijasd rescue nil
=> nil
irb(main):004:0>

It's better, as I think Logan was implying, to rescue a specific
exception if you are expecting it. That way, you will see if other
exceptions occur.

Sorry if I misunderstood your reply.

-Justin

 
Reply With Quote
 
Joe Ruby
Guest
Posts: n/a
 
      08-16-2006
Aaahhh...all this time I thought I was rescuing nil rather than rescuing
everything and returning nil!

Joe

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments