为什么我不能在“调用者”方法中捕获测试异常?

时间:2011-12-31 18:12:46

标签: ruby exception

我不明白为什么这段代码不能正常工作:

def test
  raise Exception.new 'error'
end

def caller
  begin
    test
  rescue =>e
     puts e.message
  end
end

caller

我想在caller方法中捕获测试异常,但似乎caller方法没有捕获任何内容。

3 个答案:

答案 0 :(得分:6)

您的代码不起作用的原因是因为没有明确声明的异常类型的rescue仅捕获StandardError,它是Exception的子类。由于您提出的Exception高于StandardError,因此您的rescue无法抓住它。

通常,您希望使用更具体的例外情况,而且几乎不需要使用Exception而不是StandardError

例如,这可以正常工作:

begin
  raise StandardError.new 'Uh-oh!'
rescue => e
  p e.message
end

#=> Uh-oh!

答案 1 :(得分:2)

您应该指定rescue您想要的例外情况。尝试

  rescue Exception => e

答案 2 :(得分:1)

Jan打败了我,但是......

=> var使用exception语法时,必须指定要拯救的异常类型。所有异常的基类都是Exception,因此如果将其更改为rescue Exception => e,它将起作用。此外,当您从一个方法的整个主体中拯救出来时,您不需要一个明确的开始......结束块......

def test
  raise Exception.new 'error'
end

def caller
  test
rescue Exception =>e
  puts e.message
end

caller()