Außerdem bilden Klassendefinitionen, Moduldefinitionen und (glaube ich) do/ endBlockliterale implizite Ausnahmeblöcke.
Jörg W Mittag
Kannst du auf jeden Fall auch das Ende sicherstellen?
Mohamed Hafez
Sie können auf jeden Fall auch die Rettung sicherstellen :-)
Antony
Kannst du mehr als eine Rettung in deinem Def verwenden?
Jane875
@riedjane875 Ja, Sie können mehrere Rettungen verwenden, entweder explizit (jede Rettungsklausel / jeder Rettungsblock in einer eigenen Zeile) wie rescue TypeError; rescue NameError- oder Sie können die Ausnahmeklassen durch Kommas trennen, z. B.rescue TypeError, NameError
chemturion
48
Sie können auch inline retten:
1+"str"rescue"EXCEPTION!"
druckt "AUSNAHME!" da 'String kann nicht in Fixnum gezwungen werden'
Wie können Sie die Ausnahme-Backtrace inline retten und anzeigen?
Cyril Duchon-Doris
Wie kann ich die eigentliche Ausnahme zurückgeben?
user1735921
1
Inline-Rettung ist keine gute Vorgehensweise, da sie StandardErroralle ihre Unterklassen rettet , wie z. B. NameError- dass selbst ein Tippfehler in Ihrem Code keinen Fehler auslöst . Sieheoughtbot.com/blog/don-t-inline-rescue-in- Rubin .
BrunoFacca
26
Ich verwende die Def / Rescue-Kombination häufig mit ActiveRecord-Validierungen:
def create
@person=Person.new(params[:person])@person.save!
redirect_to @personrescueActiveRecord::RecordInvalid
render :action =>:new
end
begin# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Hier defals beginAussage:
def# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Antworten:
Eine Methode "def" kann als "begin" -Anweisung dienen:
quelle
do
/end
Blockliterale implizite Ausnahmeblöcke.rescue TypeError; rescue NameError
- oder Sie können die Ausnahmeklassen durch Kommas trennen, z. B.rescue TypeError, NameError
Sie können auch inline retten:
druckt "AUSNAHME!" da 'String kann nicht in Fixnum gezwungen werden'
quelle
StandardError
alle ihre Unterklassen rettet , wie z. B.NameError
- dass selbst ein Tippfehler in Ihrem Code keinen Fehler auslöst . Sieheoughtbot.com/blog/don-t-inline-rescue-in- Rubin .Ich verwende die Def / Rescue-Kombination häufig mit ActiveRecord-Validierungen:
Ich denke, das ist sehr schlanker Code!
quelle
Beispiel:
Hier
def
alsbegin
Aussage:quelle