我的Null指针异常在哪里 - Clojure版

时间:2016-07-30 05:46:16

标签: clojure nullpointerexception

运行命令时,我收到以下堆栈跟踪:puts "Press Enter to continue or ESC to quit..." begin system("stty raw -echo") decision = STDIN.getc ensure system("stty -raw echo") end if decision.ord != 27 puts "do this stuff" else puts "bye" end

堆栈跟踪

lein run "this is the other different thing" "this,different,other"

这是我的代码:

Exception in thread "main" java.lang.NullPointerException, compiling:(/private/var/folders/y8/6lt_81xn47d4n2k641z52rg00000gn/T/form-init8328218573408236617.clj:1:125)
    at clojure.lang.Compiler.load(Compiler.java:7391)
    at clojure.lang.Compiler.loadFile(Compiler.java:7317)
    at clojure.main$load_script.invokeStatic(main.clj:275)
    at clojure.main$init_opt.invokeStatic(main.clj:277)
    at clojure.main$init_opt.invoke(main.clj:277)
    at clojure.main$initialize.invokeStatic(main.clj:308)
    at clojure.main$null_opt.invokeStatic(main.clj:342)
    at clojure.main$null_opt.invoke(main.clj:339)
    at clojure.main$main.invokeStatic(main.clj:421)
    at clojure.main$main.doInvoke(main.clj:384)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:383)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.Var.applyTo(Var.java:700)
    at clojure.main.main(main.java:37)
Caused by: java.lang.NullPointerException
    at clojure.string$replace.invokeStatic(string.clj:101)
    at clojure.string$replace.invoke(string.clj:75)
    at redact.core$redact_doc.invokeStatic(core.clj:12)
    at redact.core$redact_doc.invoke(core.clj:7)
    at redact.core$_main.invokeStatic(core.clj:54)
    at redact.core$_main.doInvoke(core.clj:50)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:383)
    at user$eval5.invokeStatic(form-init8328218573408236617.clj:1)
    at user$eval5.invoke(form-init8328218573408236617.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6927)
    at clojure.lang.Compiler.eval(Compiler.java:6917)
    at clojure.lang.Compiler.load(Compiler.java:7379)
    ... 14 more

我一直在盯着这个试图找出导致问题的原因。我已经在REPL上独立测试了所有方法,它们似乎都工作但是(-main)方法在str / replace调用上抛出空指针异常....只是不确定为什么。非常感谢您提供的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

关于你的代码有一点不太正确。我的猜测是 我们接到那个电话,因为你正在调用一个期待的功能 价值并且正在传递 - 我的猜测将是其中一个字符串 功能。

你的功能定义不太正确。如果你的功能只有一个 单个“签名”然后您不需要额外的括号。你也应该 使用let绑定而不是def。例如

(defn -main
    [& args]
    (let [stoplist (gen-stoplist args)
          target-text (get-target-text args))]
      (println (redact-doc target-text stoplist)))

您的代码未将您认为的内容传递给gen-stoplist或get-target-text。一世 怀疑空指针是因为调用str / trim被传递为nil 而不是一个字符串。

我的建议是打开一个repl并使用println进行交互 你的函数来查看解析的内容。