2009-10-09 12 views

Respuesta

189

Un método "def" puede servir como un "empezar" declaración:

def foo 
    ... 
rescue 
    ... 
end 
+0

Gracias I acaba quería saber cómo funciona eso Eso es más o menos lo que estaba buscando. Gracias. – Sid

+2

Además, las definiciones de clases, las definiciones de módulos y (creo) los literales de bloques 'do' /' end' forman bloques de excepción implícitos. –

+0

¿Puedes rescatar definitivamente también? –

41

También puede rescatar en línea: "excepción"

1 + "str" rescue "EXCEPTION!" 

imprimirá desde 'Cadena no puede ser obligado a Fixnum'

+1

¿Cómo rescatar y mostrar la traza inversa de la excepción en línea? –

+0

cómo devolver la excepción real? – user1735921

21

estoy usando el/la combinación de rescate def mucho con validaciones ActiveRecord:

def create 
    @person = Person.new(params[:person]) 
    @person.save! 
    redirect_to @person 
rescue ActiveRecord::RecordInvalid 
    render :action => :new 
end 

Creo que esto es un código muy magra!

14

Ejemplo:

begin 
    # something which might raise an exception 
rescue SomeExceptionClass => some_variable 
    # code that deals with some exception 
ensure 
    # ensure that this code always runs 
end 

Aquí, def como una declaración begin:

def 
    # something which might raise an exception 
rescue SomeExceptionClass => some_variable 
    # code that deals with some exception 
ensure 
    # ensure that this code always runs 
end 
Cuestiones relacionadas