Clojure没有捕获NumberFormatException

时间:2011-02-05 17:33:39

标签: clojure numberformatexception

在下面的代码中,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 个答案:

答案 0 :(得分:10)

try特殊表单仅捕获在正文代码的动态范围期间引发的异常。这里map返回一个惰性序列,然后从try特殊形式传递并返回。然后打印机评估序列,并在此时抛出异常。

map包裹在doall中可以解决您的问题。