【发布时间】:2019-01-22 12:18:37
【问题描述】:
我无法捕获在 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
【问题讨论】:
-
不要在代码中使用 DEFVAR...
标签: common-lisp sbcl