我有一个func,当引发异常时,我正在救援它。
但是程序继续到下一行,并调用下一个函数create_request
但是如果有例外,我不想继续
def validate_request_code options
if check_everything is good
#code to validate
else
errors << "something is gone bad"
end
[errors.size == 0, errors.size == 0 ? options : raise(ArgumentError, "Error while validating #{errors}")]
end
我正在尝试捕获/救援异常
def validate_request options
begin
validate_request_code options
rescue ArgumentError => e
log :error
rescue Exception => e
log :error
end
sleep 20
if options['action'] == "create"
create_request options
end
end
答案 0 :(得分:3)
如果通过“不继续”表示您希望继续继续原始错误(即,您只是想在此之前采取措施),则可以在救援块内调用raise
,然后重新执行引发原始错误。
def foo
begin
# stuff
rescue StandardError => e
# handle error
raise
end
end
您也可以简单地从rescue
块中返回。
def foo
begin
# stuff
rescue StandardError => e
# handle error
return some_value
end
end
顺便说一句,通常您想营救StandardError
而不是Exception
。 StandardError
涵盖了您可以在应用程序中合理处理的所有内容。外部的东西是诸如内存不足之类的东西,它们是您无法控制的。