[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

re-raising an exception with the original backtrace

Joel VanderWerf

11/28/2003 10:37:00 PM


Is there a way to re-raise an exception without replacing its backtrace
with the current one?

The reason I want to do this is that I am catching an exception and
passing it to a handler. The handler needs to make a decision and then,
possibly, re-raise the same exception, preferrably with the same
information as it originally contained.

But if I do the following, the exception takes on the backtrace of the
handler, which has lost some information. I know I can add the original
backtrace to the exception's message, but that's not the same thing...

$ cat exception.rb

class MyError < StandardError; end

def foo
raise MyError
end

def main
foo
rescue Exception => e
handler(e)
end

def handler(e)
ok = false
if ok
return true
else
puts "backtrace:", e.backtrace, "---"
raise e
end
end

main

$ ruby exception.rb
backtrace:
exception.rb:4:in `foo'
exception.rb:8:in `main'
exception.rb:23
---
exception.rb:19:in `handler': MyError (MyError)
from exception.rb:10:in `main'
from exception.rb:23

Note that the backtrace of e knows about foo, but the re-raised
exception does not.