如何捕获并重新抛出异常

时间:2015-06-24 11:35:46

标签: exception-handling clojure

我有一个clojure函数,它调用另一个函数来更新数据库。

(^{PUT true
       Path "/{id}"
       Produces ["application/json"]
       Consumes ["application/json"]
       ApiOperation {:value "Update" :notes ""}}
       updateFeedback [this
                       ^{PathParam "id"} id
                       body]
       (require 'com.xx.x.xx.xx.xx-response)
       (let [doc (json/read-json body)]
         (if-let [valid-doc (validate doc)]
                 (try+
                  (->>
                   (assoc valid-doc :modificationDate (Utilities/getCurrentDate))
                   (couch/update-document dbs/xx-db)
                   (core/ok-response))
                  (catch java.io.IOException ex
                         (log/error "line num 197"))
                  (catch java.lang.Exception ex
                         (log/error "line num 200"))))))

update-document函数抛出异常。我想把它扔回调用者 - 在这种情况下updateFeedback,以便catch块中的内容被执行。出于某种原因,clojure会记录异常,并且调用者中的catch块永远不会执行。

验证我是否在try catch块中的update-document函数中包装了代码。 catch块被执行了。

如何在函数中添加throws子句?

更新:我已更新该功能。对语法问题表示歉意。我已经更新了我们正在使用的代码。我不熟悉clojure。这是我们继承的代码,我们被要求修复错误。任何指针都会非常有用。

1 个答案:

答案 0 :(得分:7)

如果你想抓住然后重新抛出异常,你可以这样做:

(defn throwing-function
  []
  (/ 7 0))

(defn catching-function
  []
  (try
    (throwing-function)
    (catch Exception e
      (println "Caught exception:" e)
      (println "Re-throwing ...")
      (throw e))))