Busco algo como esto:¿Cuál es el camino más corto para ignorar en silencio una excepción de Rubí
raise Exception rescue nil
Pero el camino más corto que he encontrado es la siguiente:
begin
raise Exception
rescue Exception
end
Busco algo como esto:¿Cuál es el camino más corto para ignorar en silencio una excepción de Rubí
raise Exception rescue nil
Pero el camino más corto que he encontrado es la siguiente:
begin
raise Exception
rescue Exception
end
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" }
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
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.
esto es proporcionado por ActiveSupport:
suppress(Exception) do
# dangerous code here
end
http://api.rubyonrails.org/classes/Kernel.html#method-i-suppress
+1 para la solución limpia, pero prefiero la solución sin dependencias. – fguillen
+1 ¡Funciona muy bien con los rieles! – FloatingRock
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
Esto es sólo para las pruebas por lo que propone abstenerse de su sentimiento de pedir mi '¿Por qué quieres hacer esto?' :) – fguillen