¿Por qué es malo rescatar excepciones en Ruby?

Oluwafisayo Oluwatayo 15 febrero 2024
  1. El problema con el rescate de excepciones en Ruby
  2. Mejor enfoque para las excepciones en Ruby
  3. Situaciones en las que puede rescatar excepciones
  4. Conclusión
¿Por qué es malo rescatar excepciones en Ruby?

Las excepciones en Ruby son los errores que encuentran los programas cuando intentamos ejecutarlos. Algunas de estas excepciones hacen que nuestros programas se cuelguen, por lo que son muy útiles porque nos dicen cuáles son los problemas y de dónde provienen, luego sabemos qué tipo de soluciones podemos aplicar.

El problema con el rescate de excepciones en Ruby

Las excepciones son buenas porque sirven como indicadores de los problemas que tenemos con nuestros programas. Podríamos tener la tentación de rescatar excepciones dentro del código para detectar esa excepción en particular que hace que nuestro programa se bloquee, pero esto puede convertirse en un problema más que en una solución.

Cuando los programas se ejecutan en Ruby, el propio Ruby tiene excepciones dentro de estos programas, por lo que estas excepciones no hacen que nuestros programas se bloqueen. Entonces, rescatar excepciones en Ruby causará los siguientes problemas en nuestro código:

  1. Rescatar excepciones rescatará Interrupción y evitará que el usuario salga del problema con Ctrl+C.
  2. También se rescatará SignalException, lo que hará que el programa no responda a las señales; tendremos que forzar el cierre de nuestro editor de código.
  3. Cuando se rescata SyntaxError, las evaluaciones realizadas por el sistema Ruby se generarán solo en segundo plano.
  4. Las excepciones de rescate generan noMemoryError, un error que se encuentra cuando Ruby no puede asignar memoria. Es un error innecesario que no necesita ser rescatado.
  5. Dificulta la búsqueda de errores, ya que se generan todas las excepciones, y se vuelve difícil identificar la excepción real que causó que el programa se bloquee.

Para ver esto en acción, ejecutemos este código, creemos un nuevo archivo y asígnele el nombre nuevo.rb:

nuevo.rb:

loop do
  begin
    sleep 1
    eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure"
  rescue Exception
    puts "I can't stop!"
  end
end

excepciones de rescate

Verá un bucle infinito de No puedo parar, luego intente detener el programa usando Ctrl+C y simplemente continúa. La única opción es cerrar por completo el editor de código.

Mejor enfoque para las excepciones en Ruby

Ahora que hemos visto que rescatar excepciones puede provocar eventos catastróficos en nuestros programas, ¿cuál es la mejor manera de abordar las excepciones en Ruby?

  1. Podemos utilizar la función asegurar de Ruby en lugar de rescatar excepciones. Esto asegura que el código se ejecute incluso si se encuentran excepciones.
  2. Rescate StandardError en su lugar, ya que las excepciones planteadas aquí son errores que afectan directamente a la aplicación.

Veamos el fragmento de código a continuación.

nuevo.rb:

loop do
  begin
    sleep 1
    eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure"
  rescue => e
    puts "I can't stop!"
  end
end

Una vez que ejecutamos este código, obtenemos inmediatamente el error de sintaxis.

error estándar de rescate

Situaciones en las que puede rescatar excepciones

Hay ocasiones en las que rescatar excepciones puede ser útil. En situaciones en las que queremos registrar las excepciones, podemos volver a generar la excepción; esto registrará la excepción para revisitas posteriores.

Si el usuario sabe cómo manejar las excepciones, es seguro rescatarlas.

Conclusión

Las excepciones, sin duda, son indicadores de los errores y fallas en nuestros programas; son útiles para saber qué corregir cuando se actualizan los programas; es solo una cuestión de cómo los maneja un usuario.

Oluwafisayo Oluwatayo avatar Oluwafisayo Oluwatayo avatar

Fisayo is a tech expert and enthusiast who loves to solve problems, seek new challenges and aim to spread the knowledge of what she has learned across the globe.

LinkedIn