testException1(x) { try { doSomething(x); } catch (e:Error1) { println(e); } catch (e:Error2) { println(e); } catch (e:Int) { println("error code = ", e); } } is roughly equivlalent to: testException1(x) { try { doSomething(x); } catch { if (exceptionIs?(Error1)) { var e = exceptionAs(Error1); println(e); } else if (exceptionIs?(Error2)) { var e = exceptionAs(Error2); println(e); } else if (exceptionIs?(Int)) { var e = exceptionAs(Int); println("error code = ", e); } else { continueException(); } } } exceptionIs?, exceptionAs, and continueException are clay library routines. http://bitbucket.org/kssreeram/clay/src/3d43afc42b86/lib-clay/exceptions/exceptions.clay