我的Clojure代码与一个抛出多个异常的方法进行了一些Java交互。我希望处理其中的每一个异常。根据Clojure文档:
(try expr* catch-clause* finally-clause?)
catch-clause -> (catch classname name expr*)
它没有提及如何捕获多个异常。在Clojure中是否可能做到呢?
谢谢!
和在Java中一样,你可以连续声明多个catch
表达式,它们将按照声明的顺序进行匹配 - 首先是Exception1
,如果不匹配则是Exception2
等等,而finally
部分始终会被执行。
(try <some code>
(catch Exception1 e1 (prn "in catch1"))
(catch Exception2 e2 (prn "in catch2"))
(finally (prn "in finally")))
实际上,文档中已经指明了,(try expr* catch-clause* finally-clause?)
表示你可以将 "零个或多个表达式"、"零个或多个catch子句" 和 "零个或一个finally子句" 作为 try
表达式的一部分。