2. Algoritmos y Programación
Temario
• Manejo de Excepciones
– ¿Qué es un excepción?
– ¿Qué hay que investigar del lenguaje cuando tiene
manejo de excepciones?
– Excepciones en Python
www.unaj.edu.ar
4. Algoritmos y Programación
¿Qué es una excepción?
• Una excepción es un acontecimiento, que ocurre
durante la ejecución de un programa, que
interrumpe el flujo normal de las instrucciones de
programa.
– Ejemplo de excepciones:
•Abrir un archivo que no existe.
•Acceder en una lista a un valor que no existe.
•Invocar a un método que no existe.
•Referirse a una variable que no existe.
•Mezclar tipos de datos sin convertirlos previamente.
•Etc.
www.unaj.edu.ar
5. Algoritmos y Programación
Ejemplo de excepciones “sin manejar o
gestionar”
Ej. de excepción por tratar de
acceder a un indice no
existente de la lista.
IndexError: nombre de la
excepción levantada
Ej. de excepción por variable
no definida. NameError:
nombre de la excepción
levantada.
Ej. de excepción por
no existir un
archivo. IOError:
nombre de la
excepción levantada.
www.unaj.edu.ar
6. Algoritmos y Programación
Ejemplo de excepciones no manejadas y manejadas
por el programador
Salida con manejo de
excepciones por el
programador. SIN ERROR!
Constructor
para manejo “Crea un nuevo elemento en la
excepciones lista”
www.unaj.edu.ar
7. Algoritmos y Programación
¿El lenguaje tiene algún no manejadas y manejar
Ejemplo de excepciones mecanismo para manejadas
las el programador
por excepciones?
– Existen lenguajes que no presentan mecanísmos
exclusivo para manejo de excepciones. En esos
casos podrían tratar de simular el manejo de las
excepciones con otros recursos. Ej. Pascal
– Los lenguajes que tienen manejo de excepciones
lo trabajan con las estructuras definidas para ello. Ej.
Python, Ada, Java, etc.
www.unaj.edu.ar
8. Algoritmos y Programación
¿Qué hay que investigar del
lenguaje cuando tiene
manejo de excepciones?
www.unaj.edu.ar
9. Algoritmos y Programación
– ¿Qué acción se toma después de levantada y
manejada una excepción. Se continúa con la
ejecución de la unidad que lo provocó o se termina?
– ¿Cuál es su ámbito?
– ¿Cómo se alcanza una excepción?
– ¿Cómo especificar la unidades (manejadores de
excepciones) que se han de ejecutar cuando se
alcanza las excepciones?
– ¿Qué sucede cuando no se encuentra un manejador
para una excepción levantada?
– ¿El lenguaje tiene excepciones predefinidas?
www.unaj.edu.ar
11. Algoritmos y Programación
Excepciones en Phyton
La estructura que presenta Python para manejo
de excepciones es la siguiente:
Un conjunto de try:
excepciones pueden ser sentencia 1
manejadas por un mismo ....
manejador. En ese caso
se puede colocar: sentencia n
except nombre de la excepción 1:
except
sentencias
(exp1,exp2,..):
..
Puede aparecer un except
SIN nombre de except nombre de la excepción n:
excepción, pero SOLO al sentencias
final. Actúa como comodín else:
except: sentencias
finally:
Opcional
sentencias
www.unaj.edu.ar
12. Algoritmos y Programación
Cláusulas else y finally
else:
• El código colocado en la cláusula else se
ejecuta solo si no se levante una excepción
finally:
• El código colocado en la cláusula finally se
ejecuta siempre se haya o no levantado una
excepción
www.unaj.edu.ar
13. Algoritmos y Programación
Ejemplo con else
Cláusula opcional, que se ejecuta
SOLO si NO se levanta excepción
en el bloque try except
Se levanta la excepción..
NO se ejecuta el bloque else
NO se levanta la excepción..
SI se ejecuta el bloque else
www.unaj.edu.ar
14. Algoritmos y Programación
Ejemplo con finally
Cláusula opcional, pero que
permite que se ejecute una serie
de sentencias SIEMPRE, ya sea
que el proceso haya o no
terminado bien
NO se levanta la excepción..
SI levanta la excepción.. SE ejecuta el bloque finally
SE ejecuta el bloque finally
www.unaj.edu.ar
15. Algoritmos y Programación
¿Qué sucede cuando una excepción no encuentra
un manejador en su bloque “try except”?
Operación que
levantará una
excepción del tipo
NameError, “variable
no definida”
NO SE ENCUENTRA EL MANEJADOR para
esa excepción. ¿Cuál es la acción que se
toma?
www.unaj.edu.ar
16. Algoritmos y Programación
Busca estáticamente:
– Analiza si ese try está contenido dentro de otro y si
ese otro tiene un manejador para esa excepción..
Se produce un error del
tipo: NameError,
“variable no definida”,
que NO es manejada
por el bloque try except
interno. Se termina ese
bloque interno y se
SI es manejada por el
busca un manejador
bloque try except que lo más
en un bloque
contiene… externo.
Ejecuta el
manejador del
bloque que lo
contiene.
www.unaj.edu.ar
17. Algoritmos y Programación
Sino va a buscar a quién lo llamó:
Ej.: Uso de una función definida en el Modulo “modulo1”
Módulo que contiene la
función “elemento” .
Solo maneja la
excepción NameError “
Código que:
-Importa el modulo1
-Invoca a unas de sus
funciones y
-Maneja la excepción
IndexError
El error se levantó en la
func “elemento” y no se
manejó allí
www.unaj.edu.ar
18. Algoritmos y Programación
Si no se encuentra un manejador :
– Es una excepción no manejada, y la ejecución se frena con
un mensaje como los mostrados antes
El módulo que contiene
la función “elemento”
solo maneja la
excepción NameError
y el código que la
invoca solo maneja la
excepción IOError, NO
hay manejador para
IndexError
Se corta el
proceso y larga el
mensaje standard
de error
www.unaj.edu.ar
19. Algoritmos y Programación
Levantando excepciones explícitamente
con “raise”
El programador controla que exista
el índice y en caso contrario
explícitamente levanta la
excepción con la sentencia raise
www.unaj.edu.ar
20. Algoritmos y Programación
Algunas de excepciones predefinidas
– ZeroDivisionError (ArithmeticError): Lanzada cuando el segundo
argumento de una operación de división o módulo, era 0.
– EOFError (StandardError): Se intentó leer más allá del final de
fichero.
– IOError (EnvironmentError): Error en una operación de
entrada/salida..
– ImportError (StandardError): No se encuentra el módulo o el
elemento del módulo que se quería importar.
– IndexError (LookupError): El índice de la secuencia está fuera del
rango posible.
– KeyError (LookupError): La clave no existe.
– MemoryError (StandardError): Memoria disponible insuficiente.
www.unaj.edu.ar
21. Algoritmos y Programación
Algunas de excepciones predefinidas
– NameError (StandardError): No se encontró ningún elemento con ese
nombre. Suele lanzarse cuando se usan varibles no declaradas (se
puede deber a errores de tipeo).
– RuntimeError (StandardError): Error en tiempo de ejecución no
especificado.
– NotImplementedError (RuntimeError): Ese método o función no está
implementado.
– SyntaxError (StandardError): Clase padre para los errores
sintácticos.
– IndentationError (SyntaxError): Error en la indentación del archivo.
– TypeError (StandardError): Tipo de argumento no apropiado.
– ValueError (StandardError): Valor del argumento no apropiado.
– Etc.
www.unaj.edu.ar
22. Algoritmos y Programación
Excepciones definidas por el usuario
– En Python se pueden definir excepciones propias, esto se logra
creando una clase que herede de Exception
Explícitamente debemos
levantar nuestra excepción con la
sentencia raise
www.unaj.edu.ar