Clojure provee manejo de excepciones como Java (try/catch/finally), veamos un ejemplo :
(try
(/ 2 1)
(catch ArithmeticException e
"divide by zero")
(finally
(println "cleanup")))
Tambien podemos lanzar excepciones:
(try
(throw (Exception. "something went wrong"))
(catch Exception e (.getMessage e)))
Clojure provee información extra con :
- ex-info toma un mensaje y un mapa y genera una excepción
- ex-data recupera el mapa generado por ex-info
Veamos un ejemplo :
(try
(throw (ex-info "There was a problem" {:detail 42}))
(catch Exception e
(prn (:detail (ex-data e)))))