Curso de Raku / Objetos,
entrada/salida y excepciones / Excepciones / Capturar excepciones con try
No todo error es inmediato
Por omisión, una excepción lanzada detiene el programa al instante, y
try es la manera de capturarla. Pero no todo lo que parece
un error fatal detiene realmente tu programa en el momento en que
ocurre. Raku tiene fallos que se quedan callados: aplazan su reacción
hasta que usas el resultado, o te dejan inspeccionarlos y seguir
adelante. Un par de ellos ya han aparecido en esta parte, y vale la pena
reunirlos en un solo sitio.
Una división por cero. Dividir por cero no estalla donde está escrito. El valor malo se produce y se guarda en silencio; solo lanza la excepción cuando lo usas, por ejemplo al imprimirlo o convertirlo:
my $x = 1 / 0; # no error here
say 'still running';
say $x; # only now does it throwEse comportamiento aplazado, y los objetos Failure que
hay detrás, son el tema de Fallos
blandos.
Un programa externo que falla. Un Proc
devuelto por run o shell que terminó sin éxito
no lanza ninguna excepción al producirse. Solo la lanza si lo
descartas sin manejarlo; guárdalo y lee su
.exitcode (o evalúalo como booleano) y el fallo seguirá
siendo un valor simple al que puedes reaccionar. Lo viste en El objeto Proc.
El hilo común: un fallo puede aplazarse, convertirse en un
valor que examinas cuando estás listo, en lugar de en una caída
inmediata. try y el phaser CATCH se ocupan de
los errores que se lanzan de inmediato; estos mecanismos se ocupan de
los que no.
Navegación del curso
← Capturar excepciones con try
| Capture el
error →
💪 O ve directamente a los
ejercicios de esta sección.