Ich versuche meine Ruby-Fähigkeiten zu verbessern, indem ich Ausnahmen fange. Ich möchte wissen, ob es üblich ist, dieselbe Art von Ausnahme erneut auszulösen, wenn Sie mehrere Methodenaufrufe haben. Wäre der folgende Code also sinnvoll? Ist es in Ordnung, dieselbe Art von Ausnahme erneut auszulösen, oder sollte ich sie nicht bei der Prozessmethode abfangen?
class Logo
def process
begin
@processed_logo = LogoProcessor::create_image(self.src)
rescue CustomException
raise CustomException
end
end
end
module LogoProcessor
def self.create_image
raise CustomException if some_condition
end
end
begin @logo.process; rescue...
Aber dann würde ich keine Ausnahme abfangen, die vom Prozess selbst gestartet wird. aber von etwas, das aus dem Prozess heraus aufgerufen wurde. Ist das richtig zu tun?stacktrace
die ursprüngliche Ausnahme verlieren , Sie möchten wahrscheinlich eine Ausnahme einschließen,cause
die in Ruby> 2.1raise
in der Art dieser Antwort aufrufen , bleibt die ursprüngliche Ausnahme vollständig erhalten, einschließlich derbacktrace
.cause
gilt nicht für diesen Fall. Vielmehr wird es automatisch ausgefüllt, wenn einrescue
Block eine neue Ausnahme auslöst.$!
globalen Variablen zugewiesen . Das Aufrufenraise
ohne Argumente löst den darin enthaltenen Fehler aus und löst$!
effektiv den letzten Fehler aus. Allerdingsraise error
wird zu einem größeren Fehler in den enthaltenenerror
lokalen Variablen, die nicht das gleiche Objekt in enthalten sein können$!
. In meinem Beispiel$!
ist das gleiche wieerror
. Es ist jedoch auch möglich, dies zu tun:error = Exception.new; raise error
Dies löst den gleichen Fehlertyp wie das Original aus, Sie können die Nachricht jedoch anpassen.
rescue StandardError => e raise e.class, "Message: #{e.message}"
quelle