Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/audio/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure未捕获NumberFormatException_Clojure_Numberformatexception - Fatal编程技术网

Clojure未捕获NumberFormatException

Clojure未捕获NumberFormatException,clojure,numberformatexception,Clojure,Numberformatexception,在以下代码中,Clojure(1.2)打印了错误的消息: (try (let [value "1,a"] (map #(Integer/parseInt %) (.split value ","))) (catch NumberFormatException _ (println "illegal argument"))) 这应该打印“非法参数”,但它会打印一个(1) 我做错了什么 这是因为map返回的惰性序列吗?它应该如何编写?try特殊表单只捕获在主体代码的动态扩展期间引发

在以下代码中,Clojure(1.2)打印了错误的消息:

(try
  (let [value "1,a"]
    (map #(Integer/parseInt %) (.split value ",")))
  (catch NumberFormatException _ (println "illegal argument")))
这应该打印“非法参数”,但它会打印一个
(1

我做错了什么


这是因为
map
返回的惰性序列吗?它应该如何编写?

try特殊表单只捕获在主体代码的动态扩展期间引发的异常。这里
map
返回一个惰性序列,然后从
try
特殊表单和retu中传递出去然后打印机评估序列,并在该点抛出异常


doall
中包装
map
应该可以解决您的问题。

您应该会发现这很有帮助:我确实试过了。它似乎仍然返回一个封装在RuntimeException中的NFE。@拉尔夫:在1.3下它可以工作。您可以使用try包装parseInt调用,并在异常发生时返回一些合理的值。如果这不合适,当异常发生时,您可以返回nil,并检查结果序列是否包含nil,以确定是否发生异常,然后采取适当的措施。第二个建议(return
nil
)听起来很合理。我会检查一下。我尝试了
nil
替换解决方案,效果很好。谢谢!这个示例使用上述
nil
替换方法跳过无效的解决方案:
(让[value“1,a”](删除nil?(map#(try(Integer/parseInt%)(catch Exception_unil))(.split value“,”)