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

Objetos de excepción

Una excepción es un objeto, como cualquier otro en Raku. Cuando escribes die 'something failed', Raku envuelve tu mensaje en un objeto de excepción del tipo X::AdHoc.

Dentro de un CATCH puedes inspeccionar ese objeto. Su tipo viene de .^name y su texto de .message:

{
    die 'something failed';

    CATCH {
        default {
            say .^name;   # X::AdHoc
            say .message; # something failed
        }
    }
}

Conocer el tipo te permite tratar errores distintos de forma distinta. Las excepciones incorporadas de Raku tienen tipos concretos, cuyos nombres empiezan por X::, y puedes emparejarlas con when, igual que emparejabas valores en un bloque given/when:

{
    die 'something failed';

    CATCH {
        when X::AdHoc {
            say 'an ad-hoc error: ' ~ .message;
        }
        default {
            say 'some other error';
        }
    }
}

Esto imprime an ad-hoc error: something failed, porque la excepción coincidió con el tipo X::AdHoc. Emparejar por tipo es la base del manejo de errores concretos, la idea sobre la que se construye la sección de excepciones personalizadas.

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. Nombre el error
  2. Empareje el tipo
  3. Ponga un prefijo al mensaje

Quiz — CATCH   |   Nombre el error