用clojure处理异常

aiazj4mn  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(312)

在clojure脚本中,我有一个try/catch可以处理异常

datalayer (try (parse-dl line)
                           (catch Exception e []))

但是当我执行我的代码时,我有一个例外:
原因:com.fasterxml.jackson.core.jsonparseexception:输入意外结束:字符串值应为右引号
我该怎么做才能忽略这些例外

gv8xihay

gv8xihay1#

这只是一个猜测,因为我不知道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)

因为map返回一个延迟序列,实际计算发生在repl打印结果时,所以在try catch块返回后抛出异常。要修复懒惰的bug,请在调用 doall ```
user> (try
(doall (map my-work my-data))
(catch Exception e []))
[]

另一个相关的延迟bug发生在从 `with-open` 表达式,以便在进行计算时,with open宏已关闭文件。

相关问题