Scheme 清除未捕获的异常

Scheme 清除未捕获的异常,scheme,racket,Scheme,Racket,我有一个用Racket编写的软件,我想在其中使用一个非常简单的异常处理程序:当抛出异常时,处理程序打印一条消息,应用程序终止 我可以复制以下玩具示例中的行为: (define (body) (begin (displayln "First line") (error "Some error") (displayln "This line is not printed"))) (call-with-exception-handler (lambda (x) (dis

我有一个用
Racket
编写的软件,我想在其中使用一个非常简单的异常处理程序:当抛出异常时,处理程序打印一条消息,应用程序终止

我可以复制以下玩具示例中的行为:

(define (body) 
  (begin
    (displayln "First line")
    (error "Some error")
    (displayln "This line is not printed")))

(call-with-exception-handler (lambda (x) (displayln "Exception handler")) body)
此代码的输出为:

First line
Exception handler
uncaught exception: #<void>
第一行
异常处理程序
未捕获异常:#
我希望它在异常处理程序中的
displayln
表达式(即打印
“异常处理程序”
的表达式)之后退出。我该怎么做呢?

试试这个:

(with-handlers ([exn:fail? (lambda (exn)
                             ; in case you need the error message
                             (displayln (exn-message exn))
                             (displayln "Exception handler"))])
  (displayln "First line")
  (error "Some error")
  (displayln "This line is not printed"))
它将打印:

First line
Some error
Exception handler
试试这个:

(with-handlers ([exn:fail? (lambda (exn)
                             ; in case you need the error message
                             (displayln (exn-message exn))
                             (displayln "Exception handler"))])
  (displayln "First line")
  (error "Some error")
  (displayln "This line is not printed"))
它将打印:

First line
Some error
Exception handler

在哪个
displayln
expression之后?你有两个谢谢你的留言。我编辑了问题,然后
displayln
expression?你有两个谢谢你的留言。我编辑了这个问题