gpt4 book ai didi

clojure - 如何在 REPL 中读取 clojure 异常?

转载 作者:行者123 更新时间:2023-12-04 05:09:30 25 4
gpt4 key购买 nike

很多时候,当我尝试编写一些函数时,我会遇到异常。这是正常的。在 Java 中,您可以找到发生异常的地点和原因,但在 clojure 中,异常文本只会让我发疯。是否有一些提示如何读取 clojure 中的异常以及如何找到代码异常发生的位置以及为什么?

例如,我将采用一些代码:

(do
(list?)
(list? [])
(list? '(1 2 3))
(list? (defn f [] (do ())))
(list? "a"))

当我在 REPL 中调用这个函数时,我会得到
java.lang.IllegalArgumentException: Wrong number of args (0) passed to: core$list-QMARK- (NO_SOURCE_FILE:46)

这对我在第二行中找到问题没有多大帮助。在稍微复杂的代码中,它几乎不会提供任何信息。 (当然它告诉查看列表?在某些情况下,参数数量错误。)我尝试在 REPL 中编写代码是错误的吗?如何在 REPL 中读取异常消息?有没有办法如何在 REPL 中获得有关异常的更好信息?

最佳答案

您可以使用 clojure.stacktrace :http://richhickey.github.com/clojure/clojure.stacktrace-api.html

用法:

(use 'clojure.stacktrace)
(/ 1 0)
(e)

输出:
java.lang.ArithmeticException: Divide by zero
at clojure.lang.Numbers.divide (Numbers.java:156)
clojure.lang.Numbers.divide (Numbers.java:3691)
user$eval954.invoke (NO_SOURCE_FILE:1)
clojure.lang.Compiler.eval (Compiler.java:6511)
clojure.lang.Compiler.eval (Compiler.java:6477)
clojure.core$eval.invoke (core.clj:2797)
clojure.main$repl$read_eval_print__6405.invoke (main.clj:245)
clojure.main$repl$fn__6410.invoke (main.clj:266)
nil

关于clojure - 如何在 REPL 中读取 clojure 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14954445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com