Установка обработчика условий в Common Lisp - PullRequest
4 голосов
/ 30 декабря 2010

HTTP-библиотека Drakma на CLISP генерирует ошибку USOCKET: UNSUPPORTED из-за ошибки в Drakma + CLISP.Тем не менее, оказывается, что перезагрузка 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 Ответ

5 голосов
/ 30 декабря 2010

Ну, я не уверен, смогу ли я вам чем-то помочь, но: Ваши парни полностью испорчены.Попробуйте это так:

(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

...