在Common Lisp中安装条件处理程序

时间:2010-12-30 00:40:09

标签: exception lisp common-lisp conditional-statements

由于Drakma + CLISP中的错误,CLISP上的HTTP库Drakma会生成错误USOCKET:UNSUPPORTED。但是,事实证明CONTINUE重启似乎工作正常。因此,我花了一些时间与CLtL和其他引用一起尝试确定如何编写重启处理程序。

(defun http-request (url param)
  (handler-bind ((USOCKET:UNSUPPORTED
          #'(lambda (x)
              (invoke-restart 'continue)))))

  (drakma:http-request url
               :method :post
               :parameters
               param))

根据我的最佳理解,上面的代码应该捕获错误USOCKET:UNSUPPORTED。它没有;它似乎忽略了错误绑定器。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

嗯,我不确定我是否可以在这里帮助你,但是:你的parens完全搞砸了。试试这样:

(defun http-request (url param)
  (handler-bind ((usocket:unsupported #'continue))
    (drakma:http-request url :method :post :parameters param)))

如果这不起作用,请尝试检查您是否真的处理了正确的条件,以及您期望的重启是否真的可用:

(defun http-request (url param)
  (handler-bind ((condition (lambda (c)
                              (print c)
                              (print (compute-restarts)))))
    (drakma:http-request url :method :post :parameters param)))

或者,您可以查看IGNORE-ERRORS