我一直在抓挠我的头发很长一段时间,但我找不到一个错误。结果证明这是一个例外,但显然因为它发生在 EDT 上,我无法“看到”它。从终端运行时它没有显示在“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")
)
然后终端打印"trying..."但永远不会"done..."。
我尝试设置一个默认的未捕获异常处理程序:异常没有被捕获。就好像程序或 EDT 在 arity 异常之后“卡住”了(没有在任何地方打印任何内容)。
下次我应该如何处理这个问题?因为我在任何地方都看不到任何消息,所以我花了很长时间才找到。再一次:'lein run' 终端中没有任何内容,任何 Emacs 缓冲区中也没有任何内容。
我是否应该创建一个函数来包装应该在 EDT 上手动尝试/捕获的调用,然后记录/打印异常?
另请注意,这是在一个相对“长”的 Clojure 应用程序中:1000 行代码,因此我无法将其粘贴到此处,也无法在一个简短的示例中重现该行为(但它在我的应用程序中始终如一地发生)。