# Exception Handling
Exception is broadly classified into the following categories
- [[Checked Exception]]
- The classes that extend Throwable class except [[RuntimeException]] and [[Error]] are known as checked exceptions. E.g. [[IOException]], [[SQLException]], etc. Checked exceptions are checked at compile-time.
- [[Unchecked Exception]]
- The classes that extend [[RuntimeException]] are known as unchecked exceptions. For example, [[ArithmeticException]], [[NullPointerException]], [[ArrayIndexOutOfBoundsException]], etc. Unchecked exceptions are not checked at compile-time rather they are checked at runtime.
### Example
(ns clojure.examples.example
(:gen-class))
;; This program displays Hello World
(defn Example []
(def string1 (slurp "Example.txt"))
(println string1))
(Example)
#### Output
Caused by: java.io.FileNotFoundException: Example.txt (No such file or
directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at clojure.java.io$fn__9185.invoke(io.clj:229)
at clojure.java.io$fn__9098$G__9091__9105.invoke(io.clj:69)
at clojure.java.io$fn__9197.invoke(io.clj:258)
at clojure.java.io$fn__9098$G__9091__9105.invoke(io.clj:69)
### Example
(ns clojure.examples.example
(:gen-class))
(defn Example []
(try
(aget (int-array [1 2 3]) 5)
(catch Exception e (println (str "caught exception: " (.toString e))))
(finally (println "This is our final block")))
(println "Let's move on"))
(Example)
#### Output
caught exception: java.lang.ArrayIndexOutOfBoundsException: 5
This is our final block
Let's move on
## Error
{{ https://www.tutorialspoint.com/clojure/images/exceptions_in_clojure.jpg }}
### Catching Exceptions
(try
(//Protected code)
catch Exception e1)
(//Catch block)
### Example
(ns clojure.examples.example
(:gen-class))
(defn Example []
(try
(def string1 (slurp "Example.txt"))
(println string1)
(catch Exception e (println (str "caught exception: " (.getMessage e))))))
(Example)
#### Output
caught exception: Example.txt (No such file or directory)
## Multiple Catch Blocks
### Example
(ns clojure.examples.example
(:gen-class))
(defn Example []
(try
(def string1 (slurp "Example.txt"))
(println string1)
(catch java.io.FileNotFoundException e (println (str "caught file
exception: " (.getMessage e))))
(catch Exception e (println (str "caught exception: " (.getMessage e)))))
(println "Let's move on"))
(Example)
#### Output
caught file exception: Example.txt (No such file or directory)
Let's move on
## Finally Block
(try
(//Protected code)
catch Exception e1)
(//Catch block)
(finally
//Cleanup code)
### Example
(ns clojure.examples.example
(:gen-class))
(defn Example []
(try
(def string1 (slurp "Example.txt"))
(println string1)
(catch java.io.FileNotFoundException e (println (str "caught file
exception: " (.getMessage e))))
(catch Exception e (println (str "caught exception: " (.getMessage e))))
(finally (println "This is our final block")))
(println "Let's move on"))
(Example)
#### Output
caught file exception: Example.txt (No such file or directory)
This is our final block
Let's move on
### Example
(ns clojure.examples.example
(:gen-class))
(defn Example []
(try
(def string1 (slurp "Example.txt"))
(println string1)
(catch java.io.FileNotFoundException e (println (str "caught file
exception: " (.toString e))))
(catch Exception e (println (str "caught exception: " (.toString e))))
(finally (println "This is our final block")))
(println "Let's move on"))
(Example)
#### Output
caught file exception: java.io.FileNotFoundException: Example.txt (No such file
or directory)
This is our final block
Let's move on
## Refs
- https://www.tutorialspoint.com/clojure/clojure_exception_handling.htm