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

Ben*_*n D 0 ruby exception

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

def test
  raise Exception.new 'error'
end

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

caller
Run Code Online (Sandbox Code Playgroud)

我想在caller方法中捕获测试异常,但似乎该caller方法没有捕获任何东西.

cor*_*ard 6

你的代码不起作用的原因是因为rescue没有明确声明的异常类型只有catches StandardError,它是的子类Exception.因为你正在提高Exception,高于StandardError,你rescue不会抓住它.

通常你想使用更具体的异常,你几乎不必使用ExceptionStandardError.

例如,这可以正常工作:

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

#=> Uh-oh!
Run Code Online (Sandbox Code Playgroud)