From: ES Date: 2005-10-07T06:50:11+09:00 Subject: Re: Customizing Exception, but only when an error is raised Robert Klemme wrote: > Daniel Berger 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. Just 'raise' by itself seems to raise the same exception object (it does not even #dup it I think) so the #initialize would only work whenever an Exception is raised the first time. >> 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 E