Excepciones
Las excepciones nos permiten interrumpir el flujo normal del programa para indicar que algo inesperado ha sucedido.
Seguramente ya has visto excepciones como SyntaxError
que se dispara cuando tienes un error de sintaxis en el código o NoMethodError
cuando intentas invocar un método que no existe.
Cuando se dispara una excepción el programa interrumpe el código y termina a menos de que alguien intercepte la excepción y la maneje.
Interceptando excepciones
Si queremos ver el mensaje y el stacktrace podemos asignar la excepción a una variable:
Si queremos interceptar solo unas excepciones específicas debemos escribir el nombre de la clase:
Lanzando excepciones
Para lanzar una excepción utiliza la palabra clave raise
:
Cuando se lanza una excepción debemos decidir qué excepción vamos a lanzar. ArgumentError
se utiliza cuando existe un error en un argumento de un método. Otra más común es RuntimeError
:
Otras formas equivalentes en las que puedes lanzar una excepción son:
Existen muchas más excepciones incluidas con Ruby y están organizadas en una jerarquía de clases. Veamos algunas de ellas:
La jerarquía es importante porque cuando capturas, por ejemplo, StandardError
, estás capturando cualquier excepción debajo en la jerarquía como ArgumentError
, IOError
, etc.
En general, uno debe ser lo más específico al capturar excepciones. Evita capturar Exception
, es una mala práctica.
Cuando omites la excepción en el rescue
realmente estás capturando StandardError
(y por lo tanto, cualquier excepción que esté debajo en la jerarquía).
Creando nuestras propias excepciones
También es posible crear nuestras propias excepciones, simplemente crea una clase que extienda de StandardError
:
Como una excepción no es más que una clase normal de Ruby, puedes agregarle un constructor, atributos y métodos:
Last updated