[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

[Q] Catching exceptions at top level

Laurent Julliard

11/25/2004 5:16:00 PM

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


5 Answers

Florian Gross

11/25/2004 7:45:00 PM

0

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 9:55:00 PM

0

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.or...


YANAGAWA Kazuhisa

11/25/2004 11:08:00 PM

0

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 9:28:00 AM

0

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 7:48:00 AM

0

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.or...