Thanks, Alex. I didn't know about *e or Throwable->map.
-austin
On Wednesday, October 24, 2018 at 9:07:44 PM UTC-7, Alex Miller wrote:
>
> Re clj / the built-in repl:
>
> user=> (doc pst)
> -------------------------
> clojure.repl/pst
> ([] [e-or-depth] [e depth])
> Prints a stack trace of the exception, to the depth requested. If none
> supplied, *uses the root cause* of the
> most recent repl exception (*e), and a depth of 12.
>
> That is, it only prints the root cause (bottom level) exception in the
> stack.
>
> Leiningen uses its own exception printer and overrides what's in core. I'm
> not sure where exactly that's done.
>
> Perhaps useful for debugging, you can just do *e at the repl - that will
> evaluate and print the last exception in the *e var. Exceptions have a
> built-in printer that prints the exception as data and will include the
> full stack. You can access the same functionality with the core function
> Throwable->map:
>
> (Throwable->map *e)
>
> Sometimes useful for investigating the truth of the matter in a consumable
> way and taking the (possibly customized) repl machinery out of the picture.
>
>
>
>
>
>
> On Wednesday, October 24, 2018 at 8:52:58 PM UTC-5, Austin Haas wrote:
>>
>> I don't understand what is going on here. I'm trying to throw an
>> exception with a cause and sometimes the cause is included in the
>> stacktrace and sometimes it isn't.
>>
>> ~$ clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version
>> "1.10.0-beta4"}}}'
>> Clojure 1.10.0-beta4
>> user=> (try (/ 1 0) (catch Exception e "caught"))
>> "caught"
>> user=> (try (/ 1 0) (catch Exception e (throw (Exception. "caught and
>> rethrown" e))))
>> Evaluation error (ArithmeticException) at clojure.lang.Numbers.divide (
>> Numbers.java:188).
>> Divide by zero
>> user=> (clojure.repl/pst)
>> ArithmeticException Divide by zero
>> clojure.lang.Numbers.divide (Numbers.java:188)
>> clojure.lang.Numbers.divide (Numbers.java:3901)
>> user$eval3.invokeStatic (:2)
>> user$eval3.invoke (:2)
>> clojure.lang.Compiler.eval (Compiler.java:7172)
>> clojure.lang.Compiler.eval (Compiler.java:7135)
>> clojure.core/eval (core.clj:3206)
>> clojure.core/eval (core.clj:3202)
>> clojure.main/repl/read-eval-print--8898/fn--8901 (main.clj:309)
>> clojure.main/repl/read-eval-print--8898 (main.clj:307)
>> clojure.main/repl/fn--8907 (main.clj:332)
>> clojure.main/repl (main.clj:332)
>> nil
>>
>> Same behavior with Clojure 1.8 and 1.9.
>>
>> If I start a REPL via lein, the cause appears:
>>
>> $ lein repl
>> nREPL server started on port 46767 on host 127.0.0.1 - nrepl://
>> 127.0.0.1:46767
>> REPL-y 0.3.7, nREPL 0.2.12
>> Clojure 1.8.0
>> Java HotSpot(TM) 64-Bit Server VM 1.8.0_102-b14
>> Docs: (doc function-name-here)
>> (find-doc "part-of-name-here")
>> Source: (source function-name-here)
>> Javadoc: (javadoc java-object-or-class-here)
>> Exit: Control+D or (exit) or (quit)
>> Results: Stored in vars *1, *2, *3, an exception in *e
>>
>>
>> user=> (try (/ 1 0) (catch Exception e (throw (Exception. "caught and
>> rethrown" e))))
>>
>>
>> ArithmeticException Divide by zero clojure.lang.Numbers.divide
>> (Numbers.java:158)
>> user=> (clojure.repl/pst)
>> java.lang.Exception: caught and rethrown
>> (Unknown Source) user/eval1736
>> (Unknown Source) user/eval1736
>> Compiler.java:6927 clojure.lang.Compiler.
>> eval
>> Compiler.java:6890 clojure.lang.Compiler.
>> eval
>> core.clj:3105 clojure.core/eval
>> core.clj:3101 clojure.core/eval
>> main.clj:240 clojure.main/repl[fn]
>> main.clj:240 clojure.main/repl[fn]
>> main.clj:258 clojure.main/repl[fn]
>> main.clj:258 clojure.main/repl
>> main.clj:174 clojure.main/repl
>> RestFn.java:1523 clojure.lang.RestFn.
>> invoke
>> interruptible_eval.clj:87 clojure.tools.nrepl.
>> middleware.interruptible-eval/evaluate[fn]
>> AFn.java:152 clojure.lang.AFn.
>> applyToHelper
>> AFn.java:144 clojure.lang.AFn.
>> applyTo
>> core.clj:646 clojure.core/apply
>> core.clj:1881 clojure.core/with-
>> bindings*
>> core.clj:1881 clojure.core/with-
>> bindings*
>> RestFn.java:425 clojure.lang.RestFn.
>> invoke
>> interruptible_eval.clj:85 clojure.tools.nrepl.
>> middleware.interruptible-eval/evaluate
>> interruptible_eval.clj:55 clojure.tools.nrepl.
>> middleware.interruptible-eval/evaluate
>> interruptible_eval.clj:224 clojure.tools.nrepl.
>> middleware.interruptible-eval/interruptible-eval[fn]
>> interruptible_eval.clj:192 clojure.tools.nrepl.
>> middleware.interruptible-eval/run-next[fn]
>> AFn.java:22 clojure.lang.AFn.run
>> ThreadPoolExecutor.java:1142 java.util.concurrent.
>> ThreadPoolExecutor.runWorker
>> ThreadPoolExecutor.java:617 java.util.concurrent.
>> ThreadPoolExecutor$Worker.run
>> Thread.java:745 java.lang.Thread.run
>> Caused by: java.lang.ArithmeticException: Divide by zero
>> Numbers.java:158 clojure.lang.Numbers.
>> divide
>> Numbers.java:3808 clojure.lang.Numbers.
>> divide
>> nil
>>
>> But if I run lein repl from inside a project directory, the cause is not
>> included:
>>
>> $ lein new test-project
>> Generating a project called test-project based on the 'default' template.
>> The default template is intended for library projects, not applications.
>> To see other templates (app, plugin, etc), try `lein help new`.
>> ~$ cd test-project/
>> ~/test-project$ lein repl
>> nREPL server started on port 36739 on host 127.0.0.1 - nrepl://127.0.0.1:
>> 36739
>> REPL-y 0.3.7, nREPL 0.2.12
>> Clojure 1.8.0
>> Java HotSpot(TM) 64-Bit Server VM 1.8.0_102-b14
>> Docs: (doc function-name-here)
>> (find-doc "part-of-name-here")
>> Source: (source function-name-here)
>> Javadoc: (javadoc java-object-or-class-here)
>> Exit: Control+D or (exit) or (quit)
>> Results: Stored in vars *1, *2, *3, an exception in *e
>>
>>
>> user=> (try (/ 1 0) (catch Exception e (throw (Exception. "caught and
>> rethrown" e))))
>> ArithmeticException Divide by zero clojure.lang.Numbers.divide
>> (Numbers.java:158)
>>
>>
>> user=> (clojure.repl/pst)
>> ArithmeticException Divide by zero
>> clojure.lang.Numbers.divide (Numbers.java:158)
>> clojure.lang.Numbers.divide (Numbers.java:3808)
>> user/eval1244 (form-init6841584094920823421.clj:1)
>> user/eval1244 (form-init6841584094920823421.clj:1)
>> clojure.lang.Compiler.eval (Compiler.java:6927)
>> clojure.lang.Compiler.eval (Compiler.java:6890)
>> clojure.core/eval (core.clj:3105)
>> clojure.core/eval (core.clj:3101)
>> clojure.main/repl/read-eval-print--7408/fn--7411 (main.clj:240)
>> clojure.main/repl/read-eval-print--7408 (main.clj:240)
>> clojure.main/repl/fn--7417 (main.clj:258)
>> clojure.main/repl (main.clj:258)
>> nil
>>
>> Any ideas would be appreciated.
>>
>> -austin
>>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.