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