repetindo algo 3 vezes antes de lançar uma exceção - em clojure

Eu não sei como implementar este pedaço de código Python no Clojure

for i in range(3):
    try:
        ......
    except e:
        if i == 2:
            raise e
        else:
            continue
    else:
        break

Eu me pergunto por que algo tão simples no Python é tão difícil no Clojure. Eu acho que a dificuldade é porque o Clojure é uma linguagem de programação funcional e, portanto, não é adequado para uma tarefa tão imperativa. Esta é minha tentativa:

(first
  (remove #(instance? Exception %)
    (for [i (range 3)]
      (try (......)
              (catch Exception e
                (if (== i 2) 
                  (throw e)
                  e)))))))

É muito feio e, pior, não funciona como esperado. O loop for realmente é avaliado completamente em vez de preguiçosamente (percebi isso quando coloquei um println dentro).

Se alguém tiver uma ideia melhor para implementar isso, por favor me esclareça.

questionAnswers(4)

yourAnswerToTheQuestion