Benutzerdefinierte Ausnahme mit Argumenten erhöhen
Ich bin die Definition einer benutzerdefinierten Ausnahme auf ein Modell in Schienen als eine Art wrapper-Ausnahme: (begin[code]rescue[raise custom exception]end
)
Wenn ich Hebe die Ausnahme, würde ich mag, um es zu übergeben, ein paar Infos über a) die Instanz des Modell, dessen interne Funktionen auslösen des Fehlers, und b) der Fehler, der abgefangen wurde.
Dies geht auf eine automatisierte import-Methode von einem Modell, wird bevölkert von POST-Anforderung von ausländischen datasource.
tldr; Wie kann man Argumente an eine Ausnahme, da Sie definieren die Ausnahme Sie sich? Ich habe eine initialize-Methode auf, die Ausnahme, sondern die raise
syntax scheint zu akzeptieren nur eine Ausnahme, Klasse und Nachricht, keine optionale Parameter übergeben bekommen, in der die Instanziierung von Prozess.
InformationsquelleAutor der Frage Chris Keele | 2012-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
erstellen Sie eine Instanz der Ausnahme, die mit neuen:
InformationsquelleAutor der Antwort phoet
Lösung:
Dies ist der beste Weg, wenn Sie Folgen Sie den Rubocop Style Guide und immer passen Sie Ihre Nachricht, wie das zweite argument
raise
:Erhalten Sie
foo
wie diese:Wenn Sie wollen, definieren Sie die Fehlermeldung in
FooError
dann schreiben:Erklärung:
Geben Sie Ihre Nachricht als zweites argument
raise
Als Rubocop Style Guide sagt, die Nachricht und die exception-Klasse sollte zur Verfügung gestellt werden als separate Argumente, weil, wenn Sie schreiben:
Und wollen, einen backtrace zu
raise
es gibt keinen Weg, es zu tun, ohne die Nachricht zweimal:Als diese Antwort sagt, Sie wird sich übergeben zu müssen, ein backtrace, wenn Sie wollen, um re-raise eine Ausnahme, wie eine neue Instanz mit dem gleichen backtrace und eine andere Nachricht oder Daten.
In
initialize
rufensuper
nichtsuper(message)
Hier drei verschiedene Möglichkeiten der Umsetzung
FooError
mit test-code, den Sie ausführen können, in Pry:In
SuperWithMessageError
undSuperWithMessageArgumentError
die Nachricht nicht richtig eingestellt, soSuperError
ist die richtige Umsetzung.InformationsquelleAutor der Antwort Max Wallace
Hier ist ein Beispiel-code hinzufügen code zu einem Fehler:
Und es zu erhöhen:
raise MyCustomError.new(code), message
InformationsquelleAutor der Antwort cyrilchampier
Können Sie erstellen eine neue Instanz der
Exception
Unterklasse, dann erhöhen. Zum Beispiel:InformationsquelleAutor der Antwort Emily