Excepciones Algoritmos y Programación 3 A3F Conceptualización Representan situaciones EXCEPCIONALES que alteran el flujo normal de la aplicación. El uso de excepciones, simplifica el flujo principal de ejecución del código, a diferencia de lo que ocurren en lenguajes como C, donde la lógica de manejo de excepciones está muy mezclada en el código principal A3F Pasos en el manejo de excepciones Dado un bloque de código que puede lanzar una excepción, debemos: Atrapar la excepción Manejar de la excepción (registro, reintento, acción alternativa) Finalizar la acción en curso* A3F Atrapar una excepción "La division por cero produce una exception del tipo ZeroDivide que deriva de Error. Error es una clase hermana de Abort, por lo cual al ejecutar el siguiente bloque se lanzará una excepción que no será atrapada" [ 1/0] on: Abort do: [:ex | Transcript show: ex]. "Si por el contrario esperamos atrapar un excepción del tipo ZeroDivide, Error o Excepcion, la excepción será manejada imprimiendo la misma en el transcript" [ 1/0] on: Error do: [:ex | Transcript show: ex]. A3F Manejar una excepción "devolver una valor al manejar la excepción" |valor| valor := [1/0] on: Error do: [:ex | ex return: 0]. Transcript show: valor. ^valor "reintentar" divisor := 0. [resultado := 5/divisor] on: Exception do: [:ex | divisor :=divisor+1. ex retry.] A3F Finalizar la acción en curso "asegurar una accion ante una Excepcion" [archivo := File openFile('myfile'). ''hacer algo con el archivo"] ensure:[ archivo cerrar] A3F try { Excepciones en la familia C "aquí va el código que puede lanzar una excepción” } catch (IndexOutOfRangeExcepcion ex) { "Este código solo se ejecutará si salta una excepción del tipo especificado o descendiente” } finally { "Este código se ejecutará SIEMPRE, haya o no excepción” } A3F Recursos ● Apunte de excepciones en Pharo: https://gforge.inria.fr/frs/download.php/26600/PBE2-Exceptions-2010-03-02.pdf A3F ¿Preguntas? Material disponible en site de la materia A3F