【问题标题】:Handle exception with clojure使用 clojure 处理异常
【发布时间】:2014-06-24 15:05:48
【问题描述】:

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

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

但是当我执行我的代码时,我遇到了一个异常:

原因:com.fasterxml.jackson.core.JsonParseException: Unexpected end-of-input: was expecting close quote for a string value

我应该怎么做才能忽略这些异常

【问题讨论】:

  • 如果不查看其余代码,很难回答这个问题。您至少可以发布parse-dl 功能吗?
  • 没有看到额外的代码,不清楚你在问什么。未捕获的异常可能不会发生在您认为会发生的地方。

标签: exception clojure apache-pig


【解决方案1】:

这只是一个猜测,因为我不知道 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块返回后抛出异常。要修复惰性错误,请将地图包装在对 doall 的调用中

user> (try
        (doall (map my-work my-data))
        (catch Exception e []))
[]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2011-12-05
    相关资源
    最近更新 更多