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


                  ¿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
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
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
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
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
                           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
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
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
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
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
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
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
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
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
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
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
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

Clase 6 excepciones

  • 1.
    Algoritmos y Programación Manejo de Excepciones www.unaj.edu.ar
  • 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
  • 3.
    Algoritmos y Programación ¿Qué es un excepción? 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
  • 10.
    Algoritmos y Programación Excepciones en Python 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