Clojure не ловит NumberFormatException - PullRequest
       21

Clojure не ловит NumberFormatException

5 голосов
/ 05 февраля 2011

В следующем коде Clojure (1.2) печатает неправильное сообщение:

(try
  (let [value "1,a"]
    (map #(Integer/parseInt %) (.split value ",")))
  (catch NumberFormatException _ (println "illegal argument")))

Это должно вывести «недопустимый аргумент», но вместо этого оно печатает (1#<NumberFormatException java.lang.NumberFormatException: For input string: "a">.

Что я делаю не так?

Это из-за ленивой последовательности, возвращаемой map?Как это должно быть написано?

1 Ответ

10 голосов
/ 05 февраля 2011

Специальная форма try захватывает только те исключения, которые возникают во время динамического экстента кода тела. Здесь map возвращает ленивую последовательность, которая затем передается из специальной формы try и возвращается. Затем принтер оценивает последовательность, и в этот момент выдается исключение.

Упаковка map в doall должна решить вашу проблему.

...