用clojure处理异常

Eli*_*lie 3 exception clojure apache-pig

在我的clojure脚本上,我有一个应该处理异常的try/catch

                datalayer (try (parse-dl line)
                           (catch Exception e []))
Run Code Online (Sandbox Code Playgroud)

但是当我执行我的代码时,我有一个例外:

引起:com.fasterxml.jackson.core.JsonParseException:意外的输入结束:期望字符串值的结束引用

我该怎么做才能忽略这些例外

Art*_*ldt 8

这只是一个猜测,因为我不知道parse-dl做了什么,尽管有一个常见的模式会导致异常被抛出try catch之外的地方.如果你在try catch中开始使用一些惰性代码:

user> (def my-data [1 2 3])
#'user/my-data
user> (defn my-work [data]
        (throw (Exception. "hi")))
#'user/my-work
user> (try
        (map my-work my-data)
        (catch Exception e []))
Exception hi  user/my-work (form-init3735135586498578464.clj:1)
Run Code Online (Sandbox Code Playgroud)

因为map返回一个惰性序列,所以当REPL打印结果时会发生实际计算,因此在try catch块返回后抛出异常.要修复lazy-bug,请在调用中包装地图doall

user> (try
        (doall (map my-work my-data))
        (catch Exception e []))
[]
Run Code Online (Sandbox Code Playgroud)

当从with-open表达式返回一个惰性序列时,会发生另一个相关的懒惰错误,以便在计算发生时,文件已被with-open宏关闭.