Wie geht man mit Ausnahmen um, die in den Bindings oder im Hauptteil einer let
-Anweisung auftreten könnten, die denselben finally-Block verwendet? Ex:
Wenn (create-connections)
oder (dostuff)
fehlschlägt, möchte ich (close connections)
. Einige Optionen:
Option 1:
%Vor% Dies funktioniert natürlich nicht, da connections
im finally-Block nicht im Bereich ist.
Option 2:
%Vor% Diese Option fängt nur Ausnahmen ein, die im (destuff)
-Aufruf auftreten, und nicht solche, die in (create-connections)
auftreten.
Option 3:
%Vor% Dies funktioniert auch nicht, da connections
nicht den Gültigkeitsbereich für die finally-Anweisung in der let-Bindung enthält.
Was ist der beste Weg, damit umzugehen?
Das eingebaute with-open
funktioniert auf alles, was Sie .close
aufrufen können, also ist der normale Ansatz etwas wie:
und behandelt Fehler beim Öffnen von Verbindungen innerhalb des Codes, der sie nicht öffnen konnte. Wenn create-connections eine der Verbindungen nicht öffnen kann, dann ist vielleicht ein try
... finally
block in create-connections ein saubererer Ort, um diese Art von Fehler zu behandeln.
Tags und Links exception-handling clojure autocloseable