IT TIP

Ruby에서 예외를 포착 한 후 다시 발생 (동일한 예외)

itqueen 2020. 12. 11. 21:07
반응형

Ruby에서 예외를 포착 한 후 다시 발생 (동일한 예외)


예외를 포착하여 Ruby 기술을 향상 시키려고합니다. 여러 메서드 호출이있을 때 같은 종류의 예외를 다시 발생시키는 것이 일반적인지 알고 싶습니다. 그렇다면 다음 코드가 의미가 있습니까? 같은 종류의 예외를 다시 발생해도 괜찮습니까, 아니면 프로세스 메서드에서 포착하지 않아야합니까?

class Logo
  def process
    begin
      @processed_logo = LogoProcessor::create_image(self.src)
    rescue CustomException
      raise CustomException
    end
  end
end

module LogoProcessor
  def self.create_image
    raise CustomException if some_condition
  end
end

때때로 우리는 실제로 오류를 처리 하지 않고도 오류가 발생 했음을 알고 싶어합니다 .

오류 처리를 담당하는 사람은 개체의 사용자 인 호출자 인 경우가 많습니다. 오류에 관심이 있지만 그 책임을 맡고 싶지 않다면 어떻게해야합니까? 우리는 오류를 구하고 필요한 모든 작업을 수행 한 다음 아무 일도 없었던 것처럼 신호를 스택 위로 전파합니다.

예를 들어, 오류 메시지를 기록한 다음 호출자가 처리하도록하려면 어떻게해야합니까?

begin
  this_will_fail!
rescue Failure => error
  log.error error.message
  raise
end

raise인수없이 호출 하면 마지막 오류가 발생합니다. 우리의 경우, 우리는 error.

질문에 제시 한 예에서는 오류를 다시 제기 할 필요가 없습니다. 자연스럽게 스택 위로 전파되도록 할 수 있습니다. 예제의 유일한 차이점은 마지막 오류 개체를 다시 발생시키는 대신 새 오류 개체를 만들고 발생시키는 것입니다.


이렇게하면 원본과 동일한 유형의 오류가 발생하지만 메시지를 사용자 지정할 수 있습니다.

rescue StandardError => e
  raise e.class, "Message: #{e.message}"

그렇지 않습니다. 스스로에게 물어봐야 할 질문은이 정보가 어디에 필요한가요? 귀하의 경우에는 로컬로 잡아서 false를 반환합니다 (호출 실패에 주목).

참고 URL : https://stackoverflow.com/questions/23770924/reraise-same-exception-after-catching-an-exception-in-ruby

반응형