如何在Clojure中捕获多个异常?

12

我的Clojure代码与一个抛出多个异常的方法进行了一些Java交互。我希望处理其中的每一个异常。根据Clojure文档:

(try expr* catch-clause* finally-clause?)
catch-clause -> (catch classname name expr*)

它没有提及如何捕获多个异常。在Clojure中是否可能做到呢?

谢谢!

1个回答

25

和在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 表达式的一部分。


1
那个好老的Kleene星号,它从来没有让我失望 :) - Óscar López

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接