Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   [Q] Catching exceptions at top level (http://www.velocityreviews.com/forums/t818173-q-catching-exceptions-at-top-level.html)

Laurent Julliard 11-25-2004 05:15 PM

[Q] Catching exceptions at top level
 
I have sort of a trivial question here that I'm afraid is so simple
that I could not find the answer :-(

I'd like to be able to catch all unrescued exceptions raised in a Ruby
script in the END block that is executed last before the script
terminates. The goal is to intercept the the exception raised and
process the exception message and stack trace before it is printed

Shall I redefine the raise method to do this or is there another way?

Thanks for your help!

Laurent



Florian Gross 11-25-2004 07:44 PM

Re: [Q] Catching exceptions at top level
 
Laurent Julliard wrote:

> I have sort of a trivial question here that I'm afraid is so simple that
> I could not find the answer :-(
>
> I'd like to be able to catch all unrescued exceptions raised in a Ruby
> script in the END block that is executed last before the script
> terminates. The goal is to intercept the the exception raised and
> process the exception message and stack trace before it is printed


I think you can just edit the object that is in $!. If you want a
solution without using perlish variables wrap the whole application in a
rescue clause like this:

begin
code
more code
and so on ...
rescue Exception => error
do something with error
raise # reraise the exception
end

Laurent Julliard 11-25-2004 09:54 PM

Re: [Q] Catching exceptions at top level
 
Florian Gross wrote:
> Laurent Julliard wrote:
>
>> I have sort of a trivial question here that I'm afraid is so simple
>> that I could not find the answer :-(
>>
>> I'd like to be able to catch all unrescued exceptions raised in a Ruby
>> script in the END block that is executed last before the script
>> terminates. The goal is to intercept the the exception raised and
>> process the exception message and stack trace before it is printed

>
>
> I think you can just edit the object that is in $!. If you want a
> solution without using perlish variables wrap the whole application in a
> rescue clause like this:
>
> begin
> code
> more code
> and so on ...
> rescue Exception => error
> do something with error
> raise # reraise the exception
> end
>
>


The problem is that I must leave the original file containing the code
unchanged so it has to be a mechanism that i can include with a piece
of code added at runtime with a -r option

Laurent

--
Laurent JULLIARD
http://www.moldus.org/~laurent



YANAGAWA Kazuhisa 11-25-2004 11:08 PM

Re: [Q] Catching exceptions at top level
 
In Message-Id: <41A654AB.1070002@moldus.org>
Laurent Julliard <laurent@moldus.org> writes:

> The problem is that I must leave the original file containing the code
> unchanged so it has to be a mechanism that i can include with a piece
> of code added at runtime with a -r option


How about the following?

original.rb:
# your original application code.

wrapper.rb:
begin
load("original.rb")
rescue Exception => e
# transform and reraise.
end

then invoking wrapper.rb.


--
kjana@dm4lab.to November 26, 2004
Slow and steady wins the race.




Kaspar Schiess 11-26-2004 09:27 AM

Re: [Q] Catching exceptions at top level
 
Laurent Julliard <laurent@moldus.org> wrote in news:41A654AB.1070002
@moldus.org:

> The problem is that I must leave the original file containing the code
> unchanged so it has to be a mechanism that i can include with a piece
> of code added at runtime with a -r option


The solution was there, but I will make that explicit:

catcher.rb ---------------------------------------
END {
puts 'exception has happened.'
p $!
}
-----------------------------------------------------

test.rb ---------------------------------------------
raise 'dodah'
-----------------------------------------------------

Call as
ruby -rcatcher test.rb

gives you
exception has happened.
#<RuntimeError: dodah>
test.rb:1: dodah (RuntimeError)


yours, kaspar

hand manufactured code - www.tua.ch/ruby




Laurent Julliard 11-27-2004 07:47 AM

Re: [Q] Catching exceptions at top level
 
Kaspar Schiess wrote:
> Laurent Julliard <laurent@moldus.org> wrote in news:41A654AB.1070002
> @moldus.org:
>
>
>>The problem is that I must leave the original file containing the code
>>unchanged so it has to be a mechanism that i can include with a piece
>>of code added at runtime with a -r option

>
>
> The solution was there, but I will make that explicit:
>
> catcher.rb ---------------------------------------
> END {
> puts 'exception has happened.'
> p $!
> }
> -----------------------------------------------------
>
> test.rb ---------------------------------------------
> raise 'dodah'
> -----------------------------------------------------
>
> Call as
> ruby -rcatcher test.rb
>
> gives you
> exception has happened.
> #<RuntimeError: dodah>
> test.rb:1: dodah (RuntimeError)
>
>
> yours, kaspar
>
> hand manufactured code - www.tua.ch/ruby
>
>
>


This is exactly what I was lloking for and as I suspected when I first
asked the question the answer wass almost obvious :-) Thanks again

Laurent

--
Laurent JULLIARD
http://www.moldus.org/~laurent




All times are GMT. The time now is 12:38 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.