我不明白为什么这段代码不能正常工作:
def test
raise Exception.new 'error'
end
def caller
begin
test
rescue =>e
puts e.message
end
end
caller
我想在caller
方法中捕获测试异常,但似乎caller
方法没有捕获任何内容。
答案 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()