Project

General

Profile

Feature #12063

KeyError#receiver and KeyError#name

Added by ksss (Yuki Kurihara) almost 5 years ago. Updated about 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:73774]

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

Also available in: Atom PDF