Ruby 2.5 adds KeyError#receiver and KeyError#key

by Atul Bhosale,

Ruby 2.5.0 was recently released.

Earlier to Ruby 1.9 Hash#fetch method would raise IndexError for an invalid key. An IndexError is raised when the given index value is invalid.

irb(main):001:0> hash = { 'foo' => 'bar' }
irb(main):002:0> hash.fetch('foo')
IndexError: key not found
    from (irb):2:in `fetch'
    from (irb):2
    from :0

KeyError class was introduced in Ruby 1.9 and it inherits from IndexError class. It is raised when the specified key is not found.

>> hash = {foo: :bar}
=> {:foo=>:bar}
>> hash.fetch(:baz)
KeyError: key not found: :baz
	from (irb):2:in `fetch'
	from (irb):2
	from /home/atul/.rvm/rubies/ruby-2.4.4/bin/irb:11:in `<main>'

It was proposed that having KeyError#receiver and KeyError#name (or KeyError#key) like NameError, will help to debug and find typo on did_you_mean gem.

begin
  h = {foo: 1, bar: 2}
  h.fetch(:bax)
rescue KeyError => e
  p e.name     #=> :bax
  p e.receiver #=> {foo: 1, bar: 2} equal `h`
  end

There was a discussion about what method name is best between name and key. Benoit Daloze suggested that name is more consistent with other error classes such as NameError#name and NoMethodError#name. Having key as method name was approved.

Ruby 2.5.0

Ruby 2.5.0 provides KeyError#receiver and KeyError#key as methods to return details of receiver object and key which was not found.

begin
  h = { foo: 1, bar: 2}
  h.fetch(:bax)
rescue KeyError => e
  p e.key      #=> :bax
  p e.receiver #=> {foo: 1, bar: 2}
end

I hope these methods are useful in your future debugging attempts.

More articles

Turn Data into Insights with Apache Superset

Discover how to get started with Apache Superset, a powerful open-source platform for modern data visualization and exploration. From setting up our environment to building interactive dashboards and leveraging advanced analytics, this guide walks us through everything we need to unlock deeper insights from our data

Read more

Data Made Simple with Metabase

Learn how to set up and use Metabase, the open-source business intelligence platform that transforms your data into actionable insights. This comprehensive guide covers installation, dashboard creation, and advanced analytics features...

Read more

Ready to Build Something Amazing?

Codemancers can bring your vision to life and help you achieve your goals