Daniel Berger <Daniel.Berger / qwest.com> wrote:
> Hi all,
>
> Say I do something like this do the Exception class:
>
> class Exception
>    alias :old_init :initialize
>    def initialize(*args)
>       old_init(*args)
>       do_stuff
>    end
>
>    def do_stuff
>       puts "Hello World!"
>    end
> end
>
> And, I want +do_stuff+ to fire off if an error is *raised* but not if
> it is caught (and not re-raised).  In other words, I would expect
> +do_stuff+ to fire off in this example:
>
> begin
>    0/0
> rescue ZeroDivisionError
>    raise
> end
>
> But I don't want to fire off in this example:
>
> begin
>    0/0
> rescue ZeroDivisionError
>    # Do nothing
> end

The moment an exception is thrown an exception istance is created.  So your 
code will be invoked on every raise.  No way to prevent that if you put it 
into the constructor.

> Is there a way I can accomplish this?

Write a custom method that does the raising.

def my_raise(cl,*a)
  ex = cl.new(*a)
  ex.do_stuff
  raise ex
end

Kind regards

    robert