假设我有以下几点:
begin
raise 'Exception!'
rescue => e
puts "Rescued exception: #{e.message}"
raise 'Something I did in this block raised an exception!'
end
抓住第二个例外的最鲁莽的方法是什么?是最好把整个东西都包在另一个begin rescue块中,还是有更优雅的解决方案?
最佳答案
我不能用拓荒者的方式说话,但这里有一个拓荒者的方式:
使救援代码尽可能地防错。如果无法证明异常非常罕见,那么与其在救援块中开始一个救援块嵌套,不如调用另一个处理自身异常的方法,例如:
def foo
1/0
rescue
complicated_foo_error_handler
end
private
def complicated_foo_error_handler
# handle foo errors
rescue
complicated_complicated_foo_error_handler_error_handler
end
def complicated_complicated_foo_error_handler_error_handler
# handle complicated_foo_error_handler errors
rescue
STDERR.puts 'I give up!'
exit false
end