如何在美国东部时间发生Clojure异常通知?

时间:2013-03-26 18:11:36

标签: swing exception clojure

我一直在抓我的头发很长一段时间,我找不到错误。事实证明这是一个arity例外,但显然是因为它发生在美国东部时间,我无法“看到”它。当从终端运行时它没有显示在“lein run”终端中,并且当从Emacs运行时它没有显示在任何Emacs缓冲区中。

经过很长一段时间,我最终做到了这一点:

(try (function-call-with-arity-error ...) (catch Exception e (println e)

最后,由于这个原因,我看到了这张照片:

#<ArityException clojure.lang.ArityException: wrong number of args passed to...

因此我能够找到我的错误。

如果我这样做:

(do 
   (println "trying...")
   (arity-error-here-on-purpose) ; this ones throws the arity error
   (println "done")
)

然后终端打印“尝试......”但从未进入“完成......”

我尝试设置默认的未捕获异常处理程序:异常未被捕获。这就好像程序或EDT在arity异常之后“卡住”(没有在任何地方打印任何东西)。

我想如何在下次处理这个问题?因为我在任何地方看不到任何消息,所以我花了很长时间才找到。再一次:'lein run'终端没有任何东西,任何Emacs缓冲区都没有。

我是否应该手动创建一个函数来包装应该在try / catch内的EDT上发生的调用,然后记录/打印异常?

另请注意,这是一个相对“长”的Clojure应用程序:1000行代码,所以我无法将其粘贴到此处,我无法在一个简短的示例中重现该行为(但它在我的应用程序中始终如一地发生)。

1 个答案:

答案 0 :(得分:0)

您可以使用线程注册未捕获的异常处理程序,这样您就不必包装EDT上可能发生的所有调用。

尝试使用EDT注册一个,看看这是否能为您提供所需的行为。