En outre, les définitions de classe, les définitions de module et (je pense) do/ endles littéraux de bloc forment des blocs d'exceptions implicites.
Jörg W Mittag
pouvez-vous faire le sauvetage de la fin aussi?
Mohamed Hafez
Vous pouvez absolument faire en sorte que le sauvetage se termine également :-)
Antony
pouvez-vous utiliser plus d'un sauvetage dans votre def?
Marriedjane875
@ Marriedjane875 oui, vous pouvez utiliser plusieurs sauvetages, soit explicitement (chaque clause / bloc de sauvetage sur sa propre ligne) comme rescue TypeError; rescue NameError- ou vous pouvez séparer les classes d'exception par des rescue TypeError, NameError
virgules
48
Vous pouvez également sauver en ligne:
1+"str"rescue"EXCEPTION!"
imprimera "EXCEPTION!" puisque 'String ne peut pas être forcé dans Fixnum'
Comment récupérez-vous et montrez-vous le backtrace d'exception en ligne?
Cyril Duchon-Doris
comment retourner l'exception réelle?
user1735921
1
Le sauvetage en ligne n'est pas une bonne pratique car il sauve StandardErroret toutes ses sous-classes, comme NameError- ce qui signifie que même une faute de frappe dans votre code ne soulèvera pas d'erreur. Voir thinkingbot.com/blog/don-t-inline-rescue-in- rubis .
BrunoFacca
26
J'utilise beaucoup la combinaison def / rescue avec les validations ActiveRecord:
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
Ici, defen guise de begindéclaration:
def# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Réponses:
Une méthode "def" peut servir d'instruction "begin":
la source
do
/end
les littéraux de bloc forment des blocs d'exceptions implicites.rescue TypeError; rescue NameError
- ou vous pouvez séparer les classes d'exception par desrescue TypeError, NameError
Vous pouvez également sauver en ligne:
imprimera "EXCEPTION!" puisque 'String ne peut pas être forcé dans Fixnum'
la source
StandardError
et toutes ses sous-classes, commeNameError
- ce qui signifie que même une faute de frappe dans votre code ne soulèvera pas d'erreur. Voir thinkingbot.com/blog/don-t-inline-rescue-in- rubis .J'utilise beaucoup la combinaison def / rescue avec les validations ActiveRecord:
Je pense que c'est du code très léger!
la source
Exemple:
Ici,
def
en guise debegin
déclaration:la source