Clojure 错误 - 跟踪错误
Clojure error - trace error
我有一项必须在下周之前完成的学校作业,但我坐在这里试图解决一个错误问题,我真的不明白为什么我会得到这个?
据我的老师说,我必须得到这个:
user> (def v (safe (/ 1 0)))
user> v
ArithmeticException java.lang.ArithmeticException: Divide by zero
但是我这样做时得到的是:
java.io.File
user=> (def v (safe (/ 1 0)))
#'user/v
user=> v
#error {
:cause "Divide by zero"
:via
[{:type java.lang.ArithmeticException
:message "Divide by zero"
:at [clojure.lang.Numbers divide "Numbers.java" 158]}]
:trace
[[clojure.lang.Numbers divide "Numbers.java" 158]
[clojure.lang.Numbers divide "Numbers.java" 3808]
[user$fn__17 invoke "NO_SOURCE_FILE" 30]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.lang.Compiler$InvokeExpr eval "Compiler.java" 3623]
[clojure.lang.Compiler$DefExpr eval "Compiler.java" 439]
[clojure.lang.Compiler eval "Compiler.java" 6787]
[clojure.lang.Compiler eval "Compiler.java" 6745]
[clojure.core$eval invoke "core.clj" 3081]
[clojure.main$repl$read_eval_print__7099$fn__7102 invoke "main.clj" 240]
[clojure.main$repl$read_eval_print__7099 invoke "main.clj" 240]
[clojure.main$repl$fn__7108 invoke "main.clj" 258]
[clojure.main$repl doInvoke "main.clj" 258]
[clojure.lang.RestFn invoke "RestFn.java" 421]
[clojure.main$repl_opt invoke "main.clj" 324]
[clojure.main$main doInvoke "main.clj" 422]
[clojure.lang.RestFn invoke "RestFn.java" 397]
[clojure.lang.Var invoke "Var.java" 375]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.Var applyTo "Var.java" 700]
[clojure.main main "main.java" 37]]}
明白了,只是错误的格式有点不同。
如果您查看 :via
键,您会看到 :type
键的值为 java.lang.ArithmeticException
而 :message
键的值为 Divide by zero
把它们放在一起你会得到java.lang.ArithmeticException: Divide by zero
这可能与您 运行 REPL 的使用方式有关。我从未见过这样的错误出现,但我通常 运行 REPL 使用 leiningen 命令:lein repl
我有一项必须在下周之前完成的学校作业,但我坐在这里试图解决一个错误问题,我真的不明白为什么我会得到这个?
据我的老师说,我必须得到这个:
user> (def v (safe (/ 1 0)))
user> v
ArithmeticException java.lang.ArithmeticException: Divide by zero
但是我这样做时得到的是:
java.io.File
user=> (def v (safe (/ 1 0)))
#'user/v
user=> v
#error {
:cause "Divide by zero"
:via
[{:type java.lang.ArithmeticException
:message "Divide by zero"
:at [clojure.lang.Numbers divide "Numbers.java" 158]}]
:trace
[[clojure.lang.Numbers divide "Numbers.java" 158]
[clojure.lang.Numbers divide "Numbers.java" 3808]
[user$fn__17 invoke "NO_SOURCE_FILE" 30]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.lang.Compiler$InvokeExpr eval "Compiler.java" 3623]
[clojure.lang.Compiler$DefExpr eval "Compiler.java" 439]
[clojure.lang.Compiler eval "Compiler.java" 6787]
[clojure.lang.Compiler eval "Compiler.java" 6745]
[clojure.core$eval invoke "core.clj" 3081]
[clojure.main$repl$read_eval_print__7099$fn__7102 invoke "main.clj" 240]
[clojure.main$repl$read_eval_print__7099 invoke "main.clj" 240]
[clojure.main$repl$fn__7108 invoke "main.clj" 258]
[clojure.main$repl doInvoke "main.clj" 258]
[clojure.lang.RestFn invoke "RestFn.java" 421]
[clojure.main$repl_opt invoke "main.clj" 324]
[clojure.main$main doInvoke "main.clj" 422]
[clojure.lang.RestFn invoke "RestFn.java" 397]
[clojure.lang.Var invoke "Var.java" 375]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.Var applyTo "Var.java" 700]
[clojure.main main "main.java" 37]]}
明白了,只是错误的格式有点不同。
如果您查看 :via
键,您会看到 :type
键的值为 java.lang.ArithmeticException
而 :message
键的值为 Divide by zero
把它们放在一起你会得到java.lang.ArithmeticException: Divide by zero
这可能与您 运行 REPL 的使用方式有关。我从未见过这样的错误出现,但我通常 运行 REPL 使用 leiningen 命令:lein repl