function - 无法在 map 函数中捕获异常

标签 function exception clojure exception-handling

这个问题在这里已经有了答案:





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/

相关文章:

django - 与装饰器和正常功能相同的条件?

java - Clojure/Java 的高效二进制序列化

clojure - Clojure 核心中的哪些函数保留元数据?

Clojure 无符号 64 位整数

python - 从十进制转换为二进制而不使用 bin() 不打印

c++ - 在 C++ 中使用非友元方法重载 I/O 运算符 | &istream 和 &ostream 函数

javascript - 关于给定负数将函数返回为 'undefined' 的问题?

c++ - 在什么情况下EXCEPTION_RECORD链接到另一个嵌套异常?

exception - 编写错误处理的好方法是什么?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?