红宝石救援后如何停止执行

时间:2020-07-24 02:51:12

标签: ruby raise rescue

我有一个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

1 个答案:

答案 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而不是ExceptionStandardError涵盖了您可以在应用程序中合理处理的所有内容。外部的东西是诸如内存不足之类的东西,它们是您无法控制的。