Project

General

Profile

Actions

Bug #17812

closed

Timeout::Error doesn't let two-argument raise() set a new message

Added by martin.dorey@hds.com (Martin Dorey) almost 3 years ago. Updated almost 3 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux-gnu]
[ruby-core:103502]

Description

Shouldn't this:

martind@pizzagate:~$ ruby -we 'require "timeout"; raise(Timeout::Error.new("hello"), "world")'
Traceback (most recent call last):
-e:1:in `<main>': hello (Timeout::Error)
martind@pizzagate:~$ 

... say "world", like this:

martind@pizzagate:~$ ruby -we 'raise(RuntimeError.new("hello"), "world")'
Traceback (most recent call last):
-e:1:in `<main>': world (RuntimeError)
martind@pizzagate:~$ 

... rather than "hello"?

Sorry to raise an issue against such an old version but, if I'm right about the cause being that Timeout::Error#exception ignores its arguments, then that, judging by https://github.com/ruby/ruby/blob/3d32c217586a48c709b762865a8abc46f9098455/lib/timeout.rb#L38, hasn't changed since.

I have a work around for what I'm trying to do, which is generic code to re-raise an exception with some added information, so I don't need a fix or help, but I wanted to do my little bit to help Ruby have fewer surprises. I was interested to discover, in doing this, the new :cause option. I did try to check that I'm not raising a duplicate, but sorry if I failed.

Actions

Also available in: Atom PDF

Like0
Like0Like0