12

我的 Clojure 代码有一些 java 互操作,其中包含一个引发多个异常的方法。我希望与他们中的每一个人打交道。根据 Clojure 文档:

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

它没有提到捕获多个异常。在 Clojure 中可以这样做吗?

谢谢!

4

1 回答 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表达式的一部分。

于 2012-06-04T00:18:53.647 回答