결정적으로 오류 처리하기

절차적 처리는 `with-exception-handler`, 잡을 수 있는 오류 객체의 조건식 매칭은 `guard`를 사용합니다.

실행으로 확인하기

LISPEX
(guard (e ((error-object? e) (error-object-message e))) (error "bad input"))

관측 결과

OUTPUT
"bad input"

패턴 따라가기

  1. 게스트 오류를 냅니다. (error "bad input")이 안정된 메시지를 지닌 잡을 수 있는 오류 객체를 만듭니다.
  2. 구조화된 값을 검사합니다. guard는 출력 문자열을 파싱하지 않고 error-object?를 검사합니다.
  3. 복구 값을 반환합니다. 선택한 절이 메시지를 꺼내므로 전체 폼은 "bad input"으로 평가됩니다.

이 순서로 생각하세요

  • raise-continuable은 핸들러 결과를 raise 위치에 반환하며 비연속 raise는 정상 반환할 수 없습니다.
  • 표시된 진단 문자열을 파싱하지 말고 문서화된 오류 객체 술어·접근자를 사용합니다.
  • guard 절이 일치하지 않으면 원래 오류를 변경 없이 다시 발생시킵니다.

직접 확인하기

guard의 어떤 절도 오류 객체와 맞지 않으면 어떻게 될까요?

원래 오류를 바꾸지 않고 다시 냅니다. 일치 항목이 없다고 일반 성공 값으로 바뀌지 않습니다.

흔한 오해

ResourceLimit은 잡을 수 없으며 호스트 크래시를 친절한 게스트 오류로 바꾸지 않습니다.

다음으로

진단에서 단계와 코드를 보고, 결정 규칙에서 잘못된 입력을 사업 결정 전에 거부하는 법을 확인하세요.

진단 · 결정 규칙