반응형
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를 반환합니다 (호출 실패에 주목).
반응형
'IT TIP' 카테고리의 다른 글
Codemirror 텍스트 영역의 가치를 얻는 방법 (0) | 2020.12.11 |
---|---|
PDF 문서의 페이지 수 얻기 (0) | 2020.12.11 |
Mac에 sshpass를 설치하는 방법은 무엇입니까? (0) | 2020.12.10 |
Node.js의 S3 getObject에서 응답을 얻는 방법은 무엇입니까? (0) | 2020.12.10 |
JavaScript에서! =는! ==와 동일합니다. (0) | 2020.12.10 |