Подтвердить что ты не робот

Как уловить несколько исключений в Clojure?

В моем Clojure коде есть java-interop с методом, который генерирует несколько исключений. Я хочу иметь дело с каждым из них. Согласно документации Clojure:

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

в нем нет упоминаний об улавливании нескольких исключений. Возможно ли это сделать в Clojure?

Спасибо!

4b9b3361

Ответ 1

Это то же самое, что и в 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" и "нулевые или одно окончательные предложения" как часть try выражение.