ignore-errors — 오류를 무시하고 값으로 돌려받기
ignore-errors — 오류를 무시하고 값으로 돌려받기
어떤 동작이 실패할 수 있지만, 그걸 디버거를 열어가며 알려줄 필요가 없는 경우가 있어요. 예를 들어 시작 파일을 불러오는 일은 실패해도 그냥 "못 불러왔어" 정도로 넘기고 싶을 때가 많죠. ignore-errors는 error 타입의 조건이 디버거로 들어가는 걸 막고, 실패를 값으로 바꿔 돌려주는 매크로예요.
본문
ignore-errors는 error 타입의 조건을 처리하는 핸들러가 설치된 동적 환경에서 forms를 실행해요. 정상적인 상황이라면 forms가 돌려주는 값들이 그대로 돌아오고, 예외 상황이면 두 개의 값을 돌려줘요. nil과 신호된 조건이에요.
ignore-errors form*
=> result*
(defun load-init-file (program)
(let ((win nil))
(ignore-errors ; 실패해도 디버거에 들어가지 않도록
(load (merge-pathnames (make-pathname :name program :type :lisp)
(user-homedir-pathname)))
(setq win t))
(unless win (format t "~&Init file failed to load.~%"))
win))
(load-init-file "no-such-program")
>> Init file failed to load.
NIL
ignore-errors는 개념적으로 아래와 같은 handler-case와 동일해요.
(handler-case (progn . forms)
(error (condition) (values nil condition)))
예외 상황에서 두 번째 반환값이 조건이라는 점을 활용해, 정상 상황에서의 두 번째 반환값은 비거나 nil로 맞춰 두 상황을 구별하는 관용법도 흔히 쓰여요. 즉 "정상이면 값, 실패면 nil과 조건"이라는 두 값을 확인해서 성공 여부를 판단하는 식이에요.
함께 보기
handler-case