异常从该行抛出
https://github.com/clojure/clojure/blob/clojure-1.9.0/src/jvm/clojure/lang/ExceptionInfo.java#L31
由于这个调用
https://github.com/clojure/spec.alpha/blob/spec.alpha-0.1.143/src/main/clojure/clojure/spec/test/alpha.clj#L279
如果`when-not`返回nil,`ExceptionInfo`会在第31行抛出异常。
一个简单的修复可能
(apply ex-info (remove nil? (link: "基于规范检查失败" (when-not ...))))
尽管这实际上只是掩饰了问题,并没有为失败者提供可操作的信息。
很不幸,我没有任何最小测试用例,因为这代码是专有(且复杂)的。
也许作者通过阅读代码会有更多洞察。
以下是完整的堆栈跟踪
(链接:[clojure.lang.ExceptionInfo "ExceptionInfo.java" 第31行) (链接:clojure.lang.ExceptionInfo "ExceptionInfo.java" 第22行) (链接:clojure.core$ex_info invokeStatic "core.clj" 第4739行) (链接:clojure.core$ex_info invoke "core.clj" 第4739行) (链接:clojure.spec.test.alpha$explain_check invokeStatic "alpha.clj" 第277行) (链接:clojure.spec.test.alpha$explain_check invoke "alpha.clj" 第275行) (链接:clojure.spec.test.alpha$check_call invokeStatic "alpha.clj" 第295行) (链接:clojure.spec.test.alpha$check_call invoke "alpha.clj" 第285行) (链接:clojure.spec.test.alpha$quick_check$fn__2986 invoke "alpha.clj" 第308行) (链接:clojure.lang.AFn applyToHelper "AFn.java" 第154行) (链接:clojure.lang.AFn applyTo "AFn.java" 第144行) (链接:clojure.core$apply invokeStatic "core.clj" 第657行) (链接:clojure.core$apply invoke "core.clj" 第652行) (链接:clojure.test.check.properties$apply_gen$fn__16139$fn__16140 invoke "properties.cljc" 第30行) (链接:clojure.test.check.properties$apply_gen$fn__16139 invoke "properties.cljc" 第29行) (链接:clojure.test.check.rose_tree$fmap invokeStatic "rose_tree.cljc" 第77行) (链接:clojure.test.check.rose_tree$fmap invoke "rose_tree.cljc" 第73行) (链接:clojure.test.check.generators$fmap$fn__9199 invoke "generators.cljc" 第101行) (链接:clojure.test.check.generators$gen_fmap$fn__9173 invoke "generators.cljc" 第57行) (链接:clojure.test.check.generators$call_gen invokeStatic "generators.cljc" 第41行) (链接:clojure.test.check.generators$call_gen invoke "generators.cljc" 第37行) (链接:clojure.test.check$quick_check invokeStatic "check.cljc" 第94行) (链接:clojure.test.check$quick_check doInvoke "check.cljc" 第37行) (链接:clojure.lang.RestFn invoke "RestFn.java" 第425行) (链接:clojure.lang.AFn applyToHelper "AFn.java" 第156行) (链接:clojure.lang.RestFn applyTo "RestFn.java" 第132行) (链接:clojure.core$apply invokeStatic "core.clj" 第657行) (链接:clojure.core$apply invoke "core.clj" 第652行) (链接:clojure.spec.gen.alpha$quick_check invokeStatic "alpha.clj" 第29行) (链接:clojure.spec.gen.alpha$quick_check doInvoke "alpha.clj" 第27行) (链接:clojure.lang.RestFn applyTo "RestFn.java" 第137行) (链接:clojure.core$apply invokeStatic "core.clj" 第661行) (链接:clojure.core$apply invoke "core.clj" 第652行) (链接:clojure.spec.test.alpha$quick_check invokeStatic "alpha.clj" 第309行) (链接:clojure.spec.test.alpha$quick_check invoke "alpha.clj" 第302行) (链接:clojure.spec.test.alpha$check_1 invokeStatic "alpha.clj" 第335行) (链接:clojure.spec.test.alpha$check_1 invoke "alpha.clj" 第323行) (链接:clojure.spec.test.alpha$check$fn__3005 invoke "alpha.clj" 第411行) (链接:clojure.core$pmap$fn__8105$fn__8106 invoke "core.clj" 第6942行) (链接:clojure.core$binding_conveyor_fn$fn__5476 invoke "core.clj" 第2022行) (链接:clojure.lang.AFn call "AFn.java" 第18行) (链接:java.util.concurrent.FutureTask run "FutureTask.java" 第266行) (链接:java.util.concurrent.ThreadPoolExecutor runWorker "ThreadPoolExecutor.java" 第1149行) (链接:java.util.concurrent.ThreadPoolExecutor$Worker run "ThreadPoolExecutor.java" 第624行) (链接:java.lang.Thread run "Thread.java" 第748行)]