这个问题在这里已经有了答案:
Clojure not catching NumberFormatException
(1 个回答)
5年前关闭。
我正在 try catch 由传递给 map 函数的函数引发的异常,但它没有被捕获。我不明白为什么。
例子:
(defn x [x]
(throw (Exception. "An exception")))
(try
(map x '(1 2 3))
(catch Exception e "caught exception"))
最佳答案
你正受到懒惰的打击。记住,map
返回一个懒惰的 seq
,因此 x
直到有人尝试访问该 seq
的第一个元素时才会运行.
如果您通过一些 fn
意识到它,您的示例将起作用,比方说 doall
, 或 first
,像这样:
(try
(doall (map x [1 2 3]))
(catch Exception e "Caught!"))
那你为什么会收到异常呢?好吧,由于没有引发异常,
try
块返回惰性 seq
,您的 REPL 将尝试打印出来,调用 x
为你。
关于function - 无法在 map 函数中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785757/