Hi all,
i don’t know if it’s a bug but at least, for me, incomprehensible.
try this code (plain ruby):
module A
class MyException < StandardError; end
def raise_ex
raise MyException, “details…”
rescue Exception => ex
puts “inside module A #{ex.class}”
raise
end
end
class Test
include A
def call_test
raise_ex
rescue Exception => ex
puts “inside class Test #{ex.class}”
end
end
Test.new.call_test
i get this…
inside module A A::MyException
inside class Test A::MyException
…as expected.
try this wxruby code:
begin
require ‘rubygems’
rescue LoadError
end
require ‘wx’
include Wx
module A
class MyException < StandardError; end
def raise_ex
raise MyException, “details…”
rescue Exception => ex
puts “inside module A #{ex.class}”
raise
end
end
class MyFrame < Frame
include A
def initialize
super(nil, -1, "Raise Exception demonstration",
DEFAULT_POSITION, Size.new(350,200), DEFAULT_FRAME_STYLE)
panel = Panel.new(self, -1)
button = Button.new(panel, -1, "Raise exception",
Point.new(15,15))
evt_button( button.get_id ) { on_raise_exception }
evt_close { | e | on_close_window(e) }
end
def on_raise_exception
raise_ex
rescue Exception => ex
puts "inside class MyFrame #{ex.class}"
end
def on_close_window(event)
event.skip
end
end
class MyApp < App
def on_init
begin
main = MyFrame.new
main.show
rescue Exception => e
exit(1)
end
end
end
MyApp.new.main_loop
i get this…
inside module A ArgumentError # totally wrong error type
and even worse it doesn’t propagate.
Tested on ruby 1.8.6/1.9.1, wxruby 2.0.0/2.0.1 x86-mswin32/x86-mingw32