Categoria: Programacion Tema: Python Titulo: Excepciones en python
Fecha del Tema: 2012-08-07 19:08:52Las excepciones son errores detectados por Python durante la ejecución del programa. Cuando el intérprete se encuentra con una situación excepcional, como el intentar dividir un número entre 0 o el intentar acceder a un archivo que no existe, este genera o lanza una excepción, informando al usuario de que existe algún problema. Si la excepción no se captura el flujo de ejecución se interrumpe y se muestra la información asociada a la excepción en la consola de forma que el programador pueda solucionar el problema. Veamos un pequeño programa que lanzarÃa una excepción al intentar dividir 1 entre 0. def division(a, b): return a / b def calcular(): division(1, 0) calcular() Si lo ejecutamos obtendremos el siguiente mensaje de error: $ python ejemplo.py Traceback (most recent call last): File â??ejemplo.py", line 7, in calcular() File â??ejemplo.py", line 5, in calcular division(1, 0) File â??ejemplo.py", line 2, in division a / b ZeroDivisionError: integer division or modulo by zero Lo primero que se muestra es el trazado de pila o traceback, que consiste en una lista con las llamadas que provocaron la excepción. Como vemos en el trazado de pila, el error estuvo causado por la llamada a calcular() de la lÃnea 7, que a su vez llama a division(1, 0) en la lÃnea 5 y en última instancia por la ejecución de la sentencia a / b de la lÃnea 2 de division. A continuación vemos el tipo de la excepción, ZeroDivionError, junto a una descripción del error: â??integer division or modulo by zero" (módulo o división entera entre cero). En Python se utiliza una construcción try-except para capturar y tratar las excepciones. El bloque try (intentar) define el fragmento de código en el que creemos que podrÃa producirse una excepción. El bloque except (excepción) permite indicar el tratamiento que se llevará a cabo de producirse dicha excepción. Muchas veces nuestro tratamiento de la excepción consistirá simplemente en imprimir un mensaje más amigable para el usuario, otras veces nos interesará registrar los errores y de vez en cuando podremos establecer una estrategia de resolución del problema. En el siguiente ejemplo intentamos crear un objeto f de tipo fichero. De no existir el archivo pasado como parámetro, se lanza una excepción de tipo IOError, que capturamos gracias a nuestro try-except. try: f = file(â??archivo.txt") except: print â??El archivo no existe" Python permite utilizar varios except para un solo bloque try, de forma que podamos dar un tratamiento distinto a la excepción dependiendo del tipo de excepción de la que se trate. Esto es una buena práctica, y es tan sencillo como indicar el nombre del tipo a continuación del except. try: num = int(â??3a") print no_existe except NameError: print â??La variable no existe" except ValueError: print â??El valor no es un numero" def __str__(self): return â??Error â?? + str(self.valor) try: if resultado > 20: raise MiError(33) except MiError, e: print e Por último, a continuación se listan a modo de referencia las excepciones disponibles por defecto, asà como la clase de la que deriva cada una de ellas entre paréntesis. BaseException: Clase de la que heredan todas las excepciones. Exception(BaseException): Super clase de todas las excepciones que no sean de salida. GeneratorExit(Exception): Se pide que se salga de un generador. StandarError(Exception): Clase base para todas las excepciones que no tengan que ver con salir del intérprete. ArithmeticError(StandardError): Clase base para los errores aritméticos. FloatingPointError(ArithmeticError): Error en una operación de coma flotante. OverflowError(ArithmeticError): Resultado demasiado grande para poder representarse. ZeroDivisionError(ArithmeticError): Lanzada cuando el segundo argumento de una operación de división o módulo era 0. AssertionError(StandardError): Falló la condición de un estamento assert. AttributeError(StandardError): No se encontró el atributo.
Las excepciones son errores detectados por Python durante la ejecución del programa. Cuando el intérprete se encuentra con una situación excepcional, como el intentar dividir un número entre 0 o el intentar acceder a un archivo que no existe, este genera o lanza una excepción, informando al usuario de que existe algún problema. Si la excepción no se captura el flujo de ejecución se interrumpe y se muestra la información asociada a la excepción en la consola de forma que el programador pueda solucionar el problema. Veamos un pequeño programa que lanzarÃa una excepción al intentar dividir 1 entre 0. def division(a, b): return a / b def calcular(): division(1, 0) calcular() Si lo ejecutamos obtendremos el siguiente mensaje de error: $ python ejemplo.py Traceback (most recent call last): File â??ejemplo.py", line 7, in calcular() File â??ejemplo.py", line 5, in calcular division(1, 0) File â??ejemplo.py", line 2, in division a / b ZeroDivisionError: integer division or modulo by zero Lo primero que se muestra es el trazado de pila o traceback, que consiste en una lista con las llamadas que provocaron la excepción. Como vemos en el trazado de pila, el error estuvo causado por la llamada a calcular() de la lÃnea 7, que a su vez llama a division(1, 0) en la lÃnea 5 y en última instancia por la ejecución de la sentencia a / b de la lÃnea 2 de division. A continuación vemos el tipo de la excepción, ZeroDivionError, junto a una descripción del error: â??integer division or modulo by zero" (módulo o división entera entre cero). En Python se utiliza una construcción try-except para capturar y tratar las excepciones. El bloque try (intentar) define el fragmento de código en el que creemos que podrÃa producirse una excepción. El bloque except (excepción) permite indicar el tratamiento que se llevará a cabo de producirse dicha excepción. Muchas veces nuestro tratamiento de la excepción consistirá simplemente en imprimir un mensaje más amigable para el usuario, otras veces nos interesará registrar los errores y de vez en cuando podremos establecer una estrategia de resolución del problema. En el siguiente ejemplo intentamos crear un objeto f de tipo fichero. De no existir el archivo pasado como parámetro, se lanza una excepción de tipo IOError, que capturamos gracias a nuestro try-except. try: f = file(â??archivo.txt") except: print â??El archivo no existe" Python permite utilizar varios except para un solo bloque try, de forma que podamos dar un tratamiento distinto a la excepción dependiendo del tipo de excepción de la que se trate. Esto es una buena práctica, y es tan sencillo como indicar el nombre del tipo a continuación del except. try: num = int(â??3a") print no_existe except NameError: print â??La variable no existe" except ValueError: print â??El valor no es un numero" def __str__(self): return â??Error â?? + str(self.valor) try: if resultado > 20: raise MiError(33) except MiError, e: print e Por último, a continuación se listan a modo de referencia las excepciones disponibles por defecto, asà como la clase de la que deriva cada una de ellas entre paréntesis. BaseException: Clase de la que heredan todas las excepciones. Exception(BaseException): Super clase de todas las excepciones que no sean de salida. GeneratorExit(Exception): Se pide que se salga de un generador. StandarError(Exception): Clase base para todas las excepciones que no tengan que ver con salir del intérprete. ArithmeticError(StandardError): Clase base para los errores aritméticos. FloatingPointError(ArithmeticError): Error en una operación de coma flotante. OverflowError(ArithmeticError): Resultado demasiado grande para poder representarse. ZeroDivisionError(ArithmeticError): Lanzada cuando el segundo argumento de una operación de división o módulo era 0. AssertionError(StandardError): Falló la condición de un estamento assert. AttributeError(StandardError): No se encontró el atributo.