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
如何使用clojure进行简单的尝试/捕获?_Clojure_Try Catch - Fatal编程技术网

如何使用clojure进行简单的尝试/捕获?

如何使用clojure进行简单的尝试/捕获?,clojure,try-catch,Clojure,Try Catch,下面的两段代码都不适用于clojure 1.6.0 (try (prn vv) (catch clojure.lang.ExceptionInfo e (prn "catch e: " e)) (finally (prn "finally") ) ) 在阅读了这里的其他帖子后,我也尝试了这个方法: (try (doall (prn vv)) (catch clojure.lang.ExceptionInfo e (prn "catch e: " e)) (finally (

下面的两段代码都不适用于clojure 1.6.0

(try
 (prn vv)
  (catch clojure.lang.ExceptionInfo e (prn "catch e: " e))
  (finally (prn "finally") )
)
在阅读了这里的其他帖子后,我也尝试了这个方法:

(try
 (doall (prn vv))
  (catch clojure.lang.ExceptionInfo e (prn "catch e: " e))
  (finally (prn "finally") )
)
我错过了什么


Mike

捕获例外信息将仅捕获使用ex信息创建的可丢弃文件:

(try
  (throw (ex-info "bad" {:a 1 :b 2}))
  (catch clojure.lang.ExceptionInfo e
    (prn "caught" e)))
;; => "caught" #<ExceptionInfo clojure.lang.ExceptionInfo: bad {:b 2, :a 1}>
你会像这样抓住它:

(try
  (/ 1 "0")
  (catch Exception e
    (prn "caught" e)))
;; => "caught" #<ClassCastException java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number>
(试试看)
(/ 1 "0")
(捕捉例外e
(prn“捕获”e)))
;; => “被抓住”#
编译异常发生在评估之前:

(try
  w is undefined
  (catch Exception e
    (prn "caught" e)))
;; => CompilerException java.lang.RuntimeException: Unable to resolve symbol: w in this context, compiling:(/private/var/folders/8r/y2d3thln6s3fyrl_s6vknb440000gn/T/form-init6601588363347445596.clj:1:5) 

(try
  (eval 'w)
  (catch Exception e
    (prn "caught" e)))
;; => "caught" #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: w in this context, compiling:(/private/var/folders/8r/y2d3thln6s3fyrl_s6vknb440000gn/T/form-init6601588363347445596.clj:1:5)>
(试试看)
w是未定义的
(捕捉例外e
(prn“捕获”e)))
;; => CompilerException java.lang.RuntimeException:无法解析符号:w在此上下文中,编译:(/private/var/folders/8r/y2d3thln6s3fyrl_s6vknb440000gn/T/form-init6601588336334744596.clj:1:5)
(试试看
(eval'w)
(捕捉例外e
(prn“捕获”e)))
;; => “被抓住”#

您还可以使用多个catch子句来处理不同类型的异常。

您期望发生什么,以及发生了什么?什么是vv?你说“他们不工作”是什么意思?你只是想在这里打印vv。您是否打算将vv作为抛出ExceptionInfo的函数调用?在任何情况下,请告诉我们vv是什么。实际上“w”应该是“vv”(vee-vee),但没关系,关键是it应该捕获一个错误,因为它试图打印一个尚未定义的var。也就是说,我的异常处理程序应该启动,而不是默认的系统。如果没有定义vv,那么您的代码无法编译。这是你看到的例外。try/catch是运行时的,所以它永远不会运行。
(try
  w is undefined
  (catch Exception e
    (prn "caught" e)))
;; => CompilerException java.lang.RuntimeException: Unable to resolve symbol: w in this context, compiling:(/private/var/folders/8r/y2d3thln6s3fyrl_s6vknb440000gn/T/form-init6601588363347445596.clj:1:5) 

(try
  (eval 'w)
  (catch Exception e
    (prn "caught" e)))
;; => "caught" #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: w in this context, compiling:(/private/var/folders/8r/y2d3thln6s3fyrl_s6vknb440000gn/T/form-init6601588363347445596.clj:1:5)>