Exception handling 如何捕获并重新引发异常
我有一个clojure函数,它调用另一个函数来更新数据库Exception handling 如何捕获并重新引发异常,exception-handling,clojure,Exception Handling,Clojure,我有一个clojure函数,它调用另一个函数来更新数据库 (^{PUT true Path "/{id}" Produces ["application/json"] Consumes ["application/json"] ApiOperation {:value "Update" :notes ""}} updateFeedback [this ^{PathParam "id
(^{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"))))))
updatedocument函数引发异常。我想把它扔回调用方——在本例中是updateFeedback,以便执行catch块中的内容。出于某种原因,clojure记录异常,调用方中的catch块永远不会执行
为了验证,我将updatedocument函数中的代码包装在try-catch块中。在那里,catch块被执行了
如何将throws子句添加到函数中
更新:我已经更新了函数。为语法问题道歉。我已经更新了我们正在使用的代码。我不熟悉clojure。这是我们继承的代码,我们被要求修复一个bug。任何指针都会非常有用。如果您试图捕获并重新抛出异常,您可以执行以下操作:
(defn throwing-function
[]
(/ 7 0))
(defn catching-function
[]
(try
(throwing-function)
(catch Exception e
(println "Caught exception:" e)
(println "Re-throwing ...")
(throw e))))
do stuff
不是有效的函数-您缺少参数声明,并且括号不匹配。您的“some function”很可能不会引发异常。如果它这样做了,catch块将按照您的意愿执行。检查你的“某些功能”。你能用repl执行它吗?它返回什么?我重新格式化了这个示例,没有改变任何含义。并更改了标题以更好地匹配问题