我的Clojure代码有一些带有抛出多个异常的方法的java-interop。我希望与他们中的每个人打交道。根据Clojure文档:
(try expr* catch-clause* finally-clause?)
catch-clause -> (catch classname name expr*)
它没有提到捕捉多个例外。是否有可能在Clojure中这样做?
谢谢!
答案 0 :(得分:24)
它与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子句”作为{的一部分{ {1}}表达。