clase 6 excepciones

22
www.unaj.edu.ar Algoritmos y Programación Manejo de Excepciones

Upload: jorge-gamez

Post on 25-May-2015

774 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Clase 6   excepciones

www.unaj.edu.ar

Algoritmos y Programación

Manejo de Excepciones

Page 2: Clase 6   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

Page 3: Clase 6   excepciones

www.unaj.edu.ar

Algoritmos y Programación

¿Qué es un excepción?

Page 4: Clase 6   excepciones

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?

Page 5: Clase 6   excepciones

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”

Page 6: Clase 6   excepciones

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

Page 7: Clase 6   excepciones

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?

Page 8: Clase 6   excepciones

www.unaj.edu.ar

Algoritmos y Programación

¿Qué hay que investigar del lenguaje cuando tiene

manejo de excepciones?

Page 9: Clase 6   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?

Page 10: Clase 6   excepciones

www.unaj.edu.ar

Algoritmos y Programación

Excepciones en Python

Page 11: Clase 6   excepciones

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

Page 12: Clase 6   excepciones

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

Page 13: Clase 6   excepciones

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

Page 14: Clase 6   excepciones

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

Page 15: Clase 6   excepciones

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”?

Page 16: Clase 6   excepciones

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:

Page 17: Clase 6   excepciones

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í

Page 18: Clase 6   excepciones

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 :

Page 19: Clase 6   excepciones

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”

Page 20: Clase 6   excepciones

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

Page 21: Clase 6   excepciones

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

Page 22: Clase 6   excepciones

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