Project

General

Profile

Feature #12063

KeyError#receiver and KeyError#name

Added by ksss (Yuki Kurihara) almost 3 years ago. Updated about 1 year 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

Associated revisions

Revision 13f5dcb9
Added by nobu (Nobuyoshi Nakada) about 1 year ago

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

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59955 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 59955
Added by nobu (Nobuyoshi Nakada) about 1 year ago

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

Revision 59955
Added by nobu (Nobuyoshi Nakada) about 1 year ago

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

History

#3 [ruby-core:77766] Updated by hsbt (Hiroshi SHIBATA) about 2 years ago

  • Assignee deleted (ruby-core)

#5 [ruby-core:80534] Updated by ksss (Yuki Kurihara) over 1 year 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.

#6 [ruby-core:80535] Updated by Eregon (Benoit Daloze) over 1 year ago

I think "name" is more consistent with other exceptions, such as NameError#name and NoMethodError#name (by inheritance).

#7 [ruby-core:81706] Updated by matz (Yukihiro Matsumoto) over 1 year ago

Keys may not be names (strings and symbols), so I think key is a sufficient name for the method.

Matz.

#8 Updated by nobu (Nobuyoshi Nakada) about 1 year 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

Also available in: Atom PDF