是否可以覆盖异常?

时间:2011-05-09 17:17:28

标签: ruby-on-rails ruby

我有一句话:

@hsh.has_key?(foo) ? @hsh[foo][bar] : raise("custom error")

我宁愿写得像:

@hsh[foo][bar] || raise ("custom error")

但是当@hsh [foo]不存在时,会调用NoMethodError。

4 个答案:

答案 0 :(得分:2)

要保存例外,您需要rescue,但在代码中没有任何地方。 ||只会对nil做出反应。

你可能想要这个:

@hsh.fetch(foo, {})[bar] || raise("custom error")

答案 1 :(得分:1)

我认为这是最简单的改变:

@hsh[foo][bar] rescue raise ("custom error")

答案 2 :(得分:0)

如果可能的话,最好避免触发异常,但是你总是可以创建一个你可以解雇的内联块:

begin
  @hsh[foo][bar]
rescue
  raise ("custom error")
end

答案 3 :(得分:0)

@hsh[foo]返回nil,其中没有[]方法。试试这个:

@hsh[foo] && @hsh[foo][bar] || raise("custom error")