There was a mistake there, the Timeout::Error line should say

  ["timeout error", lambda { raise Timeout::Error, "hello" }],

You're right that this isn't a subclass of StandardError and isn't 
caught. It's a subclass of Interrupt. You can argue whether that was a 
good design decision or not - but since a Timeout::Error means that a 
thread was aborted mid-way at some arbitrary point, it's definitely an 
unusual case.

There are plenty of posts about why the entire timeout library is broken 
anyway.
-- 
Posted via http://www.ruby-forum.com/.