Я не могу перехватить сообщение об ошибке, которое печатается в REPL, я хотел бы, чтобы оно было в виде строки или любого другого типа, который может быть напечатан позже, возможно ли это в Common Lisp?Это что-то общее в других языках, таких как Javascript:
var myError = undefined;
try {
some();
}catch(e){
myError = e.message;
}
Конечно, в Common Lisp это не будет работать, в конце концов, оно не будет возвращать объект ошибки, как в JavaScript, но мне интересно,есть какой-нибудь способ перехватить сообщение об ошибке, поэтому мне не нужно печатать его, когда происходит ошибка, но когда я хочу.
Я использую: SBCL
Я пытаюсь:
CL-USER> (handler-case (/ 3 0)
(division-by-zero (c)
(defvar *my-error* c)))
; in: HANDLER-CASE (/ 3 0)
; (/ 3 0)
;
; caught STYLE-WARNING:
; Lisp error during constant folding:
; arithmetic error DIVISION-BY-ZERO signalled
; Operation was (/ 3 0).
;
; compilation unit finished
; caught 1 STYLE-WARNING condition
*MY-ERROR*
CL-USER> *my-error*
#<DIVISION-BY-ZERO {1004486093}>
Я хочу запечатлеть следующее сообщение для печати позже:
; in: HANDLER-CASE (/ 3 0)
; (/ 3 0)
;
; caught STYLE-WARNING:
; Lisp error during constant folding:
; arithmetic error DIVISION-BY-ZERO signalled
; Operation was (/ 3 0).
;
; compilation unit finished
; caught 1 STYLE-WARNING condition