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)