异常处理 

Clojure代码里面抛出来的异常都是运行时异常。当然从Clojure代码里面调用的Java代码还是可能抛出那种需要检查的异常的。

try - catch - finally 以及throw 提供了和java里面类似的功能。

try、catch、throw、finally:

  1. user=> (try (throw (Exception. "error")) (finally (println "final")))
  2. final
  3. Exception error  user/eval310 (NO_SOURCE_FILE:1)
  1. user=> (try (/ 3 0) (catch Exception e (println e)))
  2. #<ArithmeticException java.lang.ArithmeticException: Divide by zero>
  3. nil

assert: 
它测试一个表达式, 如果这个表达式的值为false的话,它会抛出异常。

  1. user=> (assert true)
  2. nil
  3. user=> (assert false)
  4. AssertionError Assert failed: false  user/eval317 (NO_SOURCE_FILE:1)
  5. user=> (assert nil)
  6. AssertionError Assert failed: nil  user/eval319 (NO_SOURCE_FILE:1)
  7. user=> (assert 0)
  8. nil
  9. user=> (assert [1 2 3])
  10. nil
  11. user=> (assert "foo")
  12. nil

clojure 完整示例:

[python] view plaincopy print?
  1. (ns helloclojure.myexception)
  2. (defn exception_test1 []
  3. (try (throw (Exception. "--error--"))
  4. (finally (println "final"))
  5. ))
  6. (defn exception_test2 []
  7. (try (/ 3 0)
  8. (catch Exception e (println "error: " e))
  9. ))
  10. (defn exception_test3 [cls]
  11. (try (Class/forName cls) true
  12. (catch ClassNotFoundException e false))
  13. )
  14. ;(exception_test1)
  15. (exception_test2)   ; error:  #<ArithmeticException java.lang.ArithmeticException: Divide by zero>
  16. ;(exception_test3 helloclojure.myexception)
  17. (assert true)
  18. ;(assert false)
  19. ;(try (assert false)
  20. ;  (catch Exception e (println "error" e))
  21. ;  (finally (println 'finally)))
  22. ;(assert nil)
  23. (assert [1 2 3])
  24. (assert "foo")
  25. (assert 0)
  26. (print 'end)

Clojure 学习入门(17)- 异常处理相关推荐

  1. Clojure 学习入门(6)- 函数定义

    一.创建函数:  fn: fn是一个宏,用于定义一个简单的函数,如下:  [python] view plaincopy print? user=> (fn [] "hello&quo ...

  2. Clojure 学习入门(6)—— 函数定义

    一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下:  user=> (fn [] "hello") #<user$eval375$fn__376 us ...

  3. Clojure 学习入门(1) - 学习资料

    转自:http://blog.csdn.net/ithomer/article/details/17225813 Clojure(发音类似"closure",['kləʊʒə(r) ...

  4. Clojure 学习入门(13)- binding

    Clojure里面是不支持变量的.Binding跟变量有点像,但是在被赋值之前是不允许改的,包括:全局binding, 线程本地(thread local)binding, 以及函数内的本地bindi ...

  5. 深度学习——02、深度学习入门 1-7

    01深度学习与人工智能简介 什么是人工智能? 观察周围的世界,把看到的事物加以理解,最后通过理解进行一系列的决策. 感知+理解+决策. 学习的能力,是智能的本质! 大数据时代 大数据时代造就了人工智能 ...

  6. Clojure 学习入门(16)- 正则表达式

    一.创建正则表达式  re-pattern函数:  函数 (re-pattern) 接受一个字符串参数,返回一个正则表达式样式(java.util.regex.Pattern类的实例).这个样式能用于 ...

  7. Clojure 学习入门(15)- 条件判断

    一.标准的流程控制  if:  将一个判断表达式作为它的第一个参数进行求值.如果求值为true,那么就返回它的第二个参数(相当于"then"子句)的求值结果.如果结果为false( ...

  8. Clojure 学习入门(14)- 循环控制

    Clojure 基于函数的流程控制  repeatedly 字面意思为重复函数.一般的用法如下: user=> (repeatedly 5 #(rand-int 11)) (6 8 2 6 6) ...

  9. Clojure 学习入门(12)- map/pmap

    clojure map数据结构的常用方法,小结一下 map 各种排序 [html] view plaincopy print? (println (sorted-map-by > 1 " ...

最新文章

  1. 宏基因组学习交流5群成立
  2. MySQL 高频面试题,都在这了
  3. 5天5000万访问的个人网站是如何诞生的?
  4. D-hdu 1465 不容易系列之一(递推)
  5. 谈谈我对服务熔断、服务降级的理解
  6. Luogu3350 ZJOI2016 旅行者 最短路、分治
  7. c malloc 头文件_C/C++求职者必备 23 道面试题,一道试题一份信心!
  8. cocos2d之z轴位置示例
  9. stm32单片机屏幕一直闪_STM32物联网实战项目 - 项目需求
  10. 2.冒泡排序----还是不懂,先记录下来
  11. [HNOI 2018]道路
  12. VDI序曲十九 无须×××直接mstsc到内网服务器
  13. 【网络信息安全】网络信息安全基础
  14. 50 Fast Flash MX Techniques
  15. 现代信号处理——阵列信号处理(阵列信号的高分辨处理)
  16. HDU Today-SPEA
  17. Python Network(三)案例(无向图,有向图,权重,点线分类与大小粗细)
  18. 期货开户趋势的本质是惯性
  19. 打印机不打印计算机原因,打印机正常但无法打印原因以及如何解决
  20. Java字符串格式化详解

热门文章

  1. 向着DJANGO奔跑!
  2. heartbeat双机热备配置(适用centos6\rhel6)
  3. EF 5.0 帮助类
  4. 数据库的基本命令操作
  5. Eclipse启动无响应,停留在Loading workbench状态
  6. Android事件传递机制【Touch事件】
  7. WindowsXP如何设置共享权限
  8. 开发者必备英文网站合集
  9. 顶级的CSS和Javascript动画框架推荐
  10. Android 和 iOS 各有千秋