Exception handling AllegroServe异常处理

Exception handling AllegroServe异常处理,exception-handling,lisp,common-lisp,allegro-cl,Exception Handling,Lisp,Common Lisp,Allegro Cl,当将无效主机作为参数传递给函数时,如何避免出现错误。 有什么方法可以像Java的异常处理机制一样捕获错误吗?当然,CL有一个非常好的条件系统。一个简单的选择是将对do http request的调用包装在中,如果包装的代码中显示错误条件,则返回nil(条件作为第二个值)。之后,您可以检查nil 如果您想要Java中的异常处理之类的东西,只需使用并添加一个适当的错误子句(我没有安装AllegroServe,但我想您会因为提供错误的URL而得到一个套接字错误,如果我读错了,只需更改该部分即可): 如

当将无效主机作为参数传递给函数时,如何避免出现错误。

有什么方法可以像Java的异常处理机制一样捕获错误吗?

当然,CL有一个非常好的条件系统。一个简单的选择是将对
do http request
的调用包装在中,如果包装的代码中显示错误条件,则返回
nil
(条件作为第二个值)。之后,您可以检查
nil

如果您想要Java中的异常处理之类的东西,只需使用并添加一个适当的错误子句(我没有安装AllegroServe,但我想您会因为提供错误的URL而得到一个
套接字错误
,如果我读错了,只需更改该部分即可):

如果您需要类似于
的功能,请使用:

您甚至可以获得更多的想象力,例如,通过调用堆栈下某个位置的重新启动来向上处理条件堆栈,而无需展开它。例如,如果
do-http-request
提供了重新启动以使用另一个URL重试,则可以通过使用新URL调用重新启动以重试来处理错误情况。我只是出于完整性的考虑才提到这一点——对于您的用例来说,这可能会有点过头,但是能够轻松地恢复(可能很昂贵)计算可能是一个相当方便的特性

(handler-case
    (do-http-request …)
  (socket-error ()
    …))
(unwind-protect
     (handler-case
         (do-http-request …)
       (socket-error (condition) ; bind the signalled condition
         …)                      ; code to run when a socket-error was signalled
       (:no-error (value)        ; bind the returned value
         …))                     ; code to run when no condition was signalled
  …)                             ; cleanup code (finally)