dm3/clojure.java-time

Catchable exceptions

Opened this issue · 2 comments

When conversion fails, java-time.api wraps the java.time.format.DateTimeParseException in clojure.lang.ExceptionInfo, which I cannot distinguish from any other exception when trying to catch:

(import '(java.time.format DateTimeParseException))

(try
  (t/zoned-date-time "2024-04-08T00:00:00")
  (catch DateTimeParseException _
    (println "CAUGHT")))

java.time.format.DateTimeParseException: Text '2024-04-08T00:00:00' could not be parsed at index 19
             clojure.lang.ExceptionInfo: Conversion failed

It would be convenient if java-time.api would throw with some form of :type key in the map that I could catch with e.g. https://github.com/gfredericks/catch-data, or if it would pass through the original Java exceptions.

I wasn't aware of this, where does this rethrowing happen?

I am currently not at my computer to be able to look at the stack trace, but I found this by searching for catch in the code:

(or (try (first (f args))
(catch Exception e
(throw
(ex-info "Conversion failed"
{:path (:path path), :arguments args, :to tp}
e))))