Project

General

Profile

Actions

Feature #12063

closed

KeyError#receiver and KeyError#name

Added by ksss (Yuki Kurihara) almost 9 years ago. Updated over 7 years ago.

Status:
Closed
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

Updated by hsbt (Hiroshi SHIBATA) about 8 years ago

  • Assignee deleted (core)

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.

Actions #8

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0