我有一个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。这是我们继承的代码,我们被要求修复错误。任何指针都会非常有用。
答案 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))))