On Tue, Apr 7, 2009 at 12:34 PM, Paganoni <noway / fakenullvoid.com> wrote:
> Hello, when writing stuff like that
>
> begin
> call_this()
> do_that()
> tell_them()
> print "Ho yes #{my_dear} you did it"
> rescue SomeException => e
> # snip
> end
>
> Should I move the print statement to the else part of begin/end catch block
> ?
>
> begin
> call_this()
> do_that()
> tell_them()
> rescue SomeException => e
> # snip
> else
> print "Ho yes #{my_dear} you did it"
> end
>
> I presume that the result is the same, but for clarity I would prefer the
> second solution - Now, what happen if the print statement fails or if
> my_dear() raises something ? I'll not catch it losing the benefit of the
> begin/end. So, even if easier to read, is else really useful/a good idea ?

Yes, often, because you should (in general) only be rescuing
exceptions if you can do something useful with them where you are,
otherwise, you should be letting them bubble up. So if the errors you
are going to deal with aren't the one's in the print line, it makes
sense to have it in the else. Of course, if you different logic to
deal with errors in the print statement, it even make make sense to
do:

begin
  .
  .
  .
rescue SomeException => e
 .
 .
 .
else
  begin
    print "Ho yes #{my_dear} you did it"
  rescue SomeException => e
    .
    .
    .
  end
end