我不明白为什么这段代码不能正常工作:
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方法没有捕获任何东西.
你的代码不起作用的原因是因为rescue没有明确声明的异常类型只有catches StandardError,它是的子类Exception.因为你正在提高Exception,高于StandardError,你rescue不会抓住它.
通常你想使用更具体的异常,你几乎不必使用Exception过StandardError.
例如,这可以正常工作:
begin
raise StandardError.new 'Uh-oh!'
rescue => e
p e.message
end
#=> Uh-oh!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
755 次 |
| 最近记录: |