Wie kann ich eine Ausnahme in Clojure werfen?
Möchte ich eine exception werfen, und haben die folgenden:
(throw "Some text")
Aber es scheint, um ignoriert zu werden.
Kommentar zu dem Problem
werfen
wirft Instanzen von Java Throwable
. (throw (Exception. "Irgendein text"))
funktionieren? wenn ich versuche (throw "text") bekomme ich eine ClassClassException, weil die Zeichenfolge nicht umgewandelt werden, Throwable. So ist es merkwürdig, dass das werfen wird "ignoriert" in Ihrem Fall....
InformationsquelleAutor der Frage Zubair | 2011-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie wickeln Sie die Zeichenfolge in eine Throwable:
oder
Kannst du ein try/catch/finally-block:
REPL-Sitzung:
InformationsquelleAutor der Antwort dbyrne
clojure.contrib.Zustand bietet eine Clojure-freundliche Mittel, die Behandlung von Ausnahmen. Sie heben können Bedingungen mit verursacht. Jeder Zustand kann einen eigenen handler.
Gibt es eine Reihe von Beispielen in der source auf github.
Es ist sehr flexibel, Sie können Ihre eigenen Schlüssel, Wert Paare beim heben und dann entscheiden, was zu tun ist in der Prozedur auf der Grundlage der Schlüssel/Werte.
E. g. (mangeln die Beispiel-code):
Dann können Sie einen handler für
:something-is-wrong
:InformationsquelleAutor der Antwort edoloughlin
Wenn Sie möchten, eine exception werfen, und auch einige debugging-Informationen (zusätzlich zu einer message-string), können Sie mit der integrierten ex-info Funktion.
Zum extrahieren der Daten aus dem zuvor konstruierten ex-info-Objekt, verwenden Sie ex-Daten.
Beispiel aus clojuredocs:
In einem Kommentar kolen erwähnt Schleuder, die eine erweiterte Funktionalität, mit der Sie nicht nur werfen von Objekten beliebigen Typs (mit werfen+), aber auch ein flexibler catch-syntax zu inspizieren, um Daten in Objekte geworfen (mit try+). Beispiele aus das Projekt repo:
tensor/analysieren.clj
math/Ausdruck.clj
InformationsquelleAutor der Antwort dskrvk