Estoy tratando de mejorar mis habilidades con Ruby detectando excepciones. Quiero saber si es común volver a generar el mismo tipo de excepción cuando tiene varias llamadas a métodos. Entonces, ¿tendría sentido el siguiente código? ¿Está bien volver a generar el mismo tipo de excepción o no debería detectarlo en el método de proceso?
class Logo
def process
begin
@processed_logo = LogoProcessor::create_image(self.src)
rescue CustomException
raise CustomException
end
end
end
module LogoProcessor
def self.create_image
raise CustomException if some_condition
end
end

begin @logo.process; rescue...pero entonces no estaría detectando una excepción lanzada por el proceso en sí, sino de algo que ha sido llamado desde dentro del proceso. ¿Es correcto hacerlo?stacktraceexcepción original, probablemente desee incluir la excepcióncauseque está disponible en ruby> 2.1raisede la manera de esta respuesta conserva la excepción original por completo, incluido elbacktrace.causeno se aplica a este caso. Por el contrario, se llena automáticamente cuando unrescuebloque genera una nueva excepción.$!variable global. Llamarraisesin argumentos genera el error contenido en$!, efectivamente levantando el último error. Sin embargo,raise errorgenerará el error contenido en laerrorvariable local, que puede ser o no el mismo objeto contenido en$!. En mi ejemplo,$!es lo mismo queerror. Sin embargo, también es posible hacer esto:error = Exception.new; raise errorEsto generará el mismo tipo de error que el original, pero puede personalizar el mensaje.
rescue StandardError => e raise e.class, "Message: #{e.message}"fuente