2011-02-23 18 views

Respuesta

22
def ignore_exception 
    begin 
    yield 
    rescue Exception 
    end 
end 

Ahora escriba el código como

ignore_exception { puts "Ignoring Exception"; raise Exception; puts "This is Ignored" } 
+1

Nota (porque no entendí al principio): Esto "ignora" la excepción en el sentido de que todo continúa después de omitir el resto de lo que está entre el comienzo y el rescate, la excepción. Lo que * no * hace es ignorar por completo la excepción en el sentido de que continúa haciendo lo que estaba haciendo entre el comienzo y el rescate. – cesoid

8

Simplemente cierre el lado izquierdo entre paréntesis es:

(raise RuntimeError, "foo") rescue 'yahoo' 

Tenga en cuenta que el rescate sólo ocurrirá si la excepción es un StandardError o una subclase de los mismos. Ver http://ruby.runpaint.org/exceptions para más información.

20

esto es proporcionado por ActiveSupport:

suppress(Exception) do 
    # dangerous code here 
end 

http://api.rubyonrails.org/classes/Kernel.html#method-i-suppress

+1

+1 para la solución limpia, pero prefiero la solución sin dependencias. – fguillen

+0

+1 ¡Funciona muy bien con los rieles! – FloatingRock

+1

Sugeriría reemplazar 'Exception' por' StandardError' ya que [no es una buena práctica rescatar 'Exception'] (https://stackoverflow.com/questions/10048173/why-is-it-bad-style-to- rescate-excepción-e-en-ruby). – aelesbao

Cuestiones relacionadas