Curso de Raku / Objetos, entrada/salida y excepciones / Excepciones

Excepciones propias

Además de las excepciones incorporadas X::, puedes definir las tuyas. Una excepción personalizada es una clase que hereda de la clase incorporada Exception y aporta un método message:

class TooBig is Exception {
    has $.value;

    method message {
        "Value $.value is too big";
    }
}

TooBig es una clase normal — puede tener atributos como value —, pero como es is Exception, se puede lanzar. La lanzas creando un objeto y llamándole .throw:

my $value = 20 * 30;

TooBig.new(value => $value).throw if $value > 50;

CATCH {
    when TooBig {
        say .message;
    }
}

El programa imprime:

Value 600 is too big

Dentro del CATCH, when TooBig coincide porque el objeto lanzado es de ese tipo. Una excepción personalizada lleva consigo los datos que le des (aquí, el value), de modo que el manejador puede construir un mensaje preciso o reaccionar de una forma concreta, mucho más útil que una simple cadena pasada a die.

Esto reúne todo lo de esta parte: una excepción personalizada es una clase (con atributos y un método) que participa en la maquinaria de las excepciones, lista para señalar exactamente qué salió mal.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

Ejercicios

Esta sección contiene 3 ejercicios. Mira todos los temas de esta sección antes de empezar los ejercicios.

  1. Demasiado grande
  2. Un error de número negativo
  3. Dos tipos de excepción

Quiz — fail   |   Demasiado grande