From: Paul Brannan Date: 2002-04-12T05:10:21+09:00 Subject: exceptions that are not Exceptions If someone (not me) does this in an extension: #include #include static VALUE cFoo; static VALUE test_foo(VALUE self) { rb_raise(cFoo, "testing..."); } static VALUE foo_backtrace(VALUE self) { VALUE x = rb_str_new2("this is a backtrace"); VALUE arr = rb_ary_new(); rb_ary_push(arr, x); return arr; } int main(int argc, char * argv[]) { ruby_init(); ruby_init_loadpath(); ruby_options(argc, argv); cFoo = rb_define_class("Foo", rb_cObject); rb_define_method(cFoo, "backtrace", foo_backtrace, 0); rb_define_global_function("foo", test_foo, 0); ruby_run(); } and I try to catch this exception like this: begin foo() rescue Exception puts "caught exception: #{$!.inspect}" end this does not work, because a Foo is not an Exception. I can instead do this: exc = true begin foo() exc = false ensure puts "caught exception: #{$!.inspect}" if exc end but using an ensure block to catch an exception seems unintuitive. Is there a better solution? Should rb_raise be allowed to raise exceptions that are not Exceptions? Paul