Además, las definiciones de clase, las definiciones de módulo y (creo) do/ endliterales de bloque forman bloques de excepción implícitos.
Jörg W Mittag
¿Puedes hacer definitivamente el rescate asegurar el final también?
Mohamed Hafez
Definitivamente puede hacer definitivamente el rescate, asegurar el final también :-)
Antony
¿Puedes usar más de un rescate en tu definición?
casadojane875
@ marriedjane875 sí, puede usar múltiples rescates, ya sea explícitamente (cada cláusula / bloque de rescate en su propia línea) como rescue TypeError; rescue NameError, o puede separar por comas las clases de excepción, por ejemplorescue TypeError, NameError
chemturion
48
También puede rescatar en línea:
1+"str"rescue"EXCEPTION!"
imprimirá "¡EXCEPCIÓN!" ya que 'String no se puede forzar a Fixnum'
¿Cómo se rescata y muestra el rastreo inverso de excepción en línea?
Cyril Duchon-Doris
¿Cómo devolver la excepción real?
user1735921
1
El rescate en línea no es una buena práctica, ya que rescata StandardErrory todas sus subclases, como NameError, lo que significa que incluso un error tipográfico en su código no generará un error. Consulte thinkbot.com/blog/don-t-inline-rescue-in- rubí .
BrunoFacca
26
Estoy usando mucho la combinación def / rescue con las validaciones de 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
Aquí, a defmodo de begindeclaración:
def# something which might raise an exceptionrescueSomeExceptionClass=> some_variable
# code that deals with some exceptionensure# ensure that this code always runsend
Respuestas:
Un método "def" puede servir como una declaración de "comienzo":
fuente
do
/end
literales de bloque forman bloques de excepción implícitos.rescue TypeError; rescue NameError
, o puede separar por comas las clases de excepción, por ejemplorescue TypeError, NameError
También puede rescatar en línea:
imprimirá "¡EXCEPCIÓN!" ya que 'String no se puede forzar a Fixnum'
fuente
StandardError
y todas sus subclases, comoNameError
, lo que significa que incluso un error tipográfico en su código no generará un error. Consulte thinkbot.com/blog/don-t-inline-rescue-in- rubí .Estoy usando mucho la combinación def / rescue con las validaciones de ActiveRecord:
¡Creo que este es un código muy ajustado!
fuente
Ejemplo:
Aquí, a
def
modo debegin
declaración:fuente