Clojure:如何忽略可能从表达式抛出的异常?

3
我使用 (try (/ 1 0) (catch Exception e)),但感觉有些冗余。有更简单的方法吗?一个我在使用它的例子是 sql/drop-table。如果调用失败因为表不存在也没关系。
1个回答

9
那么像这样编写一个宏如何呢:
(defmacro swallow-exceptions [& body]
    `(try ~@body (catch Exception e#)))

(swallow-exceptions (/ 1 0)) ; nil

更复杂的例子可以在这篇文章中找到。

1
如果 swallow-exceptions 表达式的值在进一步计算中使用,您将希望确保使用合理的默认值。"合理"取决于上下文。扩展宏以在出现异常时返回提供的默认值很容易,但这是需要记住的事情。 - Nathan Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接