Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception handling 如何捕获并重新引发异常_Exception Handling_Clojure - Fatal编程技术网

Exception handling 如何捕获并重新引发异常

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

我有一个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"))))))
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执行它吗?它返回什么?我重新格式化了这个示例,没有改变任何含义。并更改了标题以更好地匹配问题