无法在map函数内捕获异常

pre*_*ron 3 exception-handling exception function clojure

我正在尝试捕获由传递给map函数的函数引发的异常,但未捕获。我不明白为什么。

例:

(defn x [x]
  (throw (Exception. "An exception")))

(try
  (map x '(1 2 3))
  (catch Exception e "caught exception"))
Run Code Online (Sandbox Code Playgroud)

Kri*_*abó 5

你被懒惰打了。请记住,map返回一个lazy seq,因此x只有在某些东西尝试访问该元素的第一个元素时才返回seq

如果您使用some fn,例如doallfirst,实现了示例,则该示例将起作用:

(try
  (doall (map x [1 2 3]))
  (catch Exception e "Caught!"))
Run Code Online (Sandbox Code Playgroud)

那为什么您完全收到例外?好吧,因为没有引发异常,所以该try块返回lazy seq,您的REPL会尝试将其打印出来,并呼吁x您。