[Q] Catching exceptions at top level

L

Laurent Julliard

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
 
F

Florian Gross

Laurent said:
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
 
L

Laurent Julliard

Florian said:
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
 
Y

YANAGAWA Kazuhisa

In Message-Id: <[email protected]>
Laurent Julliard said:
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.
 
K

Kaspar Schiess

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
 
L

Laurent Julliard

Kaspar said:
@moldus.org:




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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top