例外のキー:cause, :via and :trace
にアクセスする方法が見つかりませんでした。ここでアクセスするには:cause、:via、:Clojureの例外のトレースキー?
は、コードは次のとおりです。
(try
(throw (IllegalArgumentException. "1"))
(catch Exception e
e))
出力:
#error{:cause "1",
:via [{:type java.lang.IllegalArgumentException, :message "1", :at [user$eval4073 invokeStatic "form-init5592296091748814678.clj" 1]}],
:trace [[user$eval4073 invokeStatic "form-init5592296091748814678.clj" 1]
[user$eval4073 invoke "form-init5592296091748814678.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 6927]
[clojure.lang.Compiler eval "Compiler.java" 6890]
[clojure.core$eval invokeStatic "core.clj" 3105]
[clojure.core$eval invoke "core.clj" 3101]
[clojure.main$repl$read_eval_print__7408$fn__7411 invoke "main.clj" 240]
....]}
P.S:(:E経由)は動作しません。
それはスタックトレース/メッセージ/原因のためだけの便利な出力です。したがって、java getters(https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#getStackTrace())で取得できます。 '(seq(.getStackTrace e))' – leetwinski
また、このレコードを読み書きすることもできます: '(binding [* data-readers * {'エラーID}] ([err-data(read-string(pr-str e))] " – leetwinski
または単に'(:via(clojure.edn/read-string)(subs(pr-str e)6)))) ' – leetwinski