View
768
Download
1
Category
Preview:
Citation preview
www.unaj.edu.ar
Algoritmos y Programación
Manejo de Excepciones
www.unaj.edu.ar
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
Algoritmos y Programación
¿Qué es un excepción?
www.unaj.edu.ar
Algoritmos y Programació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.
¿Qué es una excepción?
www.unaj.edu.ar
Algoritmos y Programación
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.
Ejemplo de excepciones “sin manejar o gestionar”
www.unaj.edu.ar
Algoritmos y Programación
Constructor para manejo excepciones
Salida con manejo de excepciones por el
programador. SIN ERROR!
“Crea un nuevo elemento en la lista”
Ejemplo de excepciones no manejadas y manejadas por el programador
www.unaj.edu.ar
Algoritmos y Programación
– 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.
Ejemplo de excepciones no manejadas y manejadas por el programador ¿El lenguaje tiene algún mecanismo para manejar las excepciones?
www.unaj.edu.ar
Algoritmos y Programación
¿Qué hay que investigar del lenguaje cuando tiene
manejo de excepciones?
www.unaj.edu.ar
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
Algoritmos y Programación
Excepciones en Python
www.unaj.edu.ar
Algoritmos y Programación
La estructura que presenta Python para manejo de excepciones es la siguiente:
try:sentencia 1....sentencia n
except nombre de la excepción 1: sentencias ..except nombre de la excepción n: sentencias
Un conjunto de excepciones pueden ser manejadas por un mismo manejador. En ese caso se puede colocar:
except (exp1,exp2,..):Puede aparecer un except SIN nombre de excepción, pero SOLO al final. Actúa como comodín
except:
Opcional
else: sentencias finally: sentencias
Excepciones en Phyton
www.unaj.edu.ar
Algoritmos y Programación
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
Cláusulas else y finally
www.unaj.edu.ar
Algoritmos y Programación
Cláusula opcional, que se ejecuta SOLO si NO se levanta excepción en el bloque try except
NO se ejecuta el bloque else
SI se ejecuta el bloque else
Se levanta la excepción..
NO se levanta la excepción..
Ejemplo con else
www.unaj.edu.ar
Algoritmos y Programación
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
Ejemplo con finally
www.unaj.edu.ar
Algoritmos y Programación
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?
¿Qué sucede cuando una excepción no encuentra un manejador en su bloque “try except”?
www.unaj.edu.ar
Algoritmos y Programación
– 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.
SI es manejada por el bloque try except que lo contiene…
Se termina ese bloque interno y se busca un manejador en un bloque más externo.
Ejecuta el manejador del bloque que lo contiene.
Busca estáticamente:
www.unaj.edu.ar
Algoritmos y Programación
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
Sino va a buscar a quién lo llamó:
El error se levantó en la func “elemento” y no se manejó allí
www.unaj.edu.ar
Algoritmos y Programación
– 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
Si no se encuentra un manejador :
www.unaj.edu.ar
Algoritmos y Programación
El programador controla que exista el índice y en caso contrario explícitamente levanta la excepción con la sentencia raise
Levantando excepciones explícitamente con “raise”
www.unaj.edu.ar
Algoritmos y Programación
– 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.
Algunas de excepciones predefinidas
www.unaj.edu.ar
Algoritmos y Programación
– 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.
Algunas de excepciones predefinidas
www.unaj.edu.ar
Algoritmos y Programación
– En Python se pueden definir excepciones propias, esto se logra
creando una clase que herede de Exception
Excepciones definidas por el usuario
Explícitamente debemos levantar nuestra excepción con la sentencia raise
Recommended