Вопрос:

Clojure не ловит NumberFormatException

clojure numberformatexception

758 просмотра

1 ответ

14721 Репутация автора

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

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

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

Что я делаю неправильно?

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

Автор: Ralph Источник Размещён: 05.02.2011 05:33

Ответы (1)


10 плюса

1804 Репутация автора

Решение

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

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

Автор: Brian Размещён: 05.02.2011 08:25
Вопросы из категории :
32x32