如何在作爲參數傳遞給功能do-http-request無效主機時避免出現錯誤。
有什麼辦法可以像Java的異常處理機制那樣捕獲錯誤?AllegroServe異常處理
4
A
回答
4
當然,CL有一個非常好的條件系統。一個簡單的選擇是將呼叫打包到ignore-errors
中的do-http-request
,如果在包裝代碼中發信號通知錯誤條件,則返回nil
(以及條件作爲第二值)。之後您可以檢查nil
。
如果你想要更類似於Java中的異常處理,只需使用handler-case
並添加一個適當的錯誤子句(我沒有安裝AllegroServe,但我想你得到一個socket-error
提供了一個錯誤的URL - 只是改變那部分如果我誤解):
(handler-case
(do-http-request …)
(socket-error()
…))
如果您需要finally
樣的功能,使用unwind-protect
:
(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)
你甚至可以得到更多的看中,並如使用handler-bind
通過在堆棧下方調用重新啓動來處理條件堆棧,而無需解開它。例如,如果do-http-request
提供重新啓動以再次嘗試使用另一個URL,則可以通過使用新URL重新啓動該重新啓動來處理錯誤情況。我只是爲了完整而提到這一點 - 這對您的用例來說會是過分的,但能夠輕鬆恢復(可能很昂貴)的計算可能是一個相當方便的功能。
相關問題
- 1. 異常處理:多次處理異常
- 2. php異常處理異常
- 3. 異常處理
- 4. 異常處理
- 5. 異常處理
- 6. 異常處理
- 7. 處理異常
- 8. 異常處理
- 9. 處理異常
- 10. 異常處理
- 11. 處理異常
- 12. 異常處理
- 13. 處理異常
- 14. 處理異常
- 15. 異常處理
- 16. 異常處理
- 17. 異常處理
- 18. 異常處理
- 19. 處理異常
- 20. 異常處理
- 21. 處理異常
- 22. 異常處理?
- 23. 異常處理
- 24. 異常處理SQL
- 25. Java異常處理?
- 26. InvokeRequired異常處理
- 27. Junit異常處理
- 28. 異常處理2
- 29. Python3異常處理
- 30. Mono.Debugger.Soft - 異常處理