Feature #12063
closedKeyError#receiver and KeyError#name
Description
I propose KeyError#receiver and KeyError#name (or KeyError#key) like NameError.
I think these method help to debug.
And will be able to find typo on did_you_mean gem.
See also https://github.com/yuki24/did_you_mean/pull/71
begin
h = {foo: 1, bar: 2}
h.fetch(:bax)
rescue KeyError => e
p e.receiver #=> {foo: 1, bar: 2} equal `h`
p e.name #=> :bax
end
begin
h = {foo: 1, bar: 2, baz: 3}
h.fetch_values(:bar, :bax)
rescue KeyError => e
p e.receiver #=> {foo: 1, bar: 2, baz: 3} equal `h`
p e.name #=> :bax
end
begin
ENV.fetch("HOEM")
rescue KeyError => e
p e.receiver #=> ENV
p e.name #=> "HOEM"
end
begin
sprintf("%<foo>d", {fooo: 1})
rescue KeyError => e
p e.receiver #=> {fooo: 1}
p e.name #=> :foo
end
Updated by ksss (Yuki Kurihara) almost 9 years ago
I made a patch https://github.com/ruby/ruby/pull/1251
Updated by ferdinandrosario@gmail.com (ferdinand rosario) about 8 years ago
- Assignee set to core
Updated by hsbt (Hiroshi SHIBATA) about 8 years ago
- Assignee deleted (
core)
Updated by matz (Yukihiro Matsumoto) about 8 years ago
Agreed.
Matz.
Updated by ksss (Yuki Kurihara) over 7 years ago
Which method name is best?
"name" referenced from "NameError".
But I think, "key" is also good. Because this is "KeyError" method.
The patch on github is using "key".
Thanks.
Updated by Eregon (Benoit Daloze) over 7 years ago
I think "name" is more consistent with other exceptions, such as NameError#name and NoMethodError#name (by inheritance).
Updated by matz (Yukihiro Matsumoto) over 7 years ago
Keys may not be names (strings and symbols), so I think key
is a sufficient name for the method.
Matz.
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r59955.
error.c: KeyError#receiver and KeyError#key
-
error.c: new method KeyError#receiver and KeyError#key.
[Feature #12063] -
hash.c: make KeyError object with receiver and key.
-
sprintf.c: ditto.
Author: ksss co000ri@gmail.com