I would do something like this:
begin @param_info.fetch(:drug).fetch(:name) rescue KeyError
You can do this in one function:
def param_info_key(info, key1, key2) info.fetch(key1).fetch(key2) rescue KeyError nil end param_info_key({}, :a, :b) # nil param_info_key({a: {}}, :a, :b) # nil param_info_key({a: {b: "foo"}}, :a, :b) # "foo"
Example:
irb(main):001:0> s = {} => {} irb(main):002:0> begin irb(main):003:1* s.fetch(:foo).fetch(:bar) irb(main):004:1> rescue KeyError irb(main):005:1> puts "Key not found" irb(main):006:1> end Key not found => nil
source share