46 votes

Comment puis-je lancer une exception en Clojure?

Je souhaite lancer une exception et sont les suivantes:

(throw "Some text")

Cependant, elle semble être ignoré.

76voto

dbyrne Points 18604

Vous avez besoin d'envelopper votre chaîne dans un Throwable:

(throw (Throwable. "Some text"))

ou

(throw (Exception. "Some text"))

Vous pouvez configurer un try/catch/finally bloc ainsi:

(defn myDivision [x y]
  (try
    (/ x y)
    (catch ArithmeticException e
      (println "Exception message: " (.getMessage e)))
    (finally 
      (println "Done."))))

REPL session:

user=> (myDivision 4 2)
Done.
2
user=> (myDivision 4 0)
Exception message:  Divide by zero
Done.
nil

10voto

edoloughlin Points 2048

clojure.contrib.condition fournit un Clojure-un moyen de traitement des exceptions. Vous pouvez soulever des conditions avec les causes. Chaque état peut avoir son propre gestionnaire.

Il y a un certain nombre d'exemples dans la source sur github.

C'est assez souples, en ce que vous pouvez fournir votre propre clé, la valeur des paires de sensibilisation et de décider ensuite que faire de votre gestionnaire basé sur les clés/valeurs.

E. g. (modificateur de l'exemple de code):

(if (something-wrong x)
  (raise :type :something-is-wrong :arg 'x :value x))

Vous pouvez alors disposer d'un gestionnaire pour l' :something-is-wrong:

(handler-case :type
  (do-non-error-condition-stuff)
  (handle :something-is-wrong
    (print-stack-trace *condition*)))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X