Las Excepciones son una estructura de control que implementan ciertos lenguajes de programación con el objetivo de manejar condiciones “anormales” o no esperadas dentro del programa que normalmente impedirían el continuo desarrollo del programa, pero que pueden ser tratados en el mismo curso del programa.

Por ejemplo, un programa puede admitir cierto número de errores en el formato de los datos y continuar su proceso para producir el mejor resultado posible en lugar de producir una salida aparatosa llena de mensajes de error probablemente incomprensibles para el usuario. Muchas veces, la acción asociada a una excepción es simplemente producir un mensaje informativo y terminar; otras veces, es sólo indicación de la necesidad de un cambio en la estrategia de resolución del problema.

Para darnos una idea veamos el siguiente ejemplo:

>>> dic = {'a':3, 'b':4}

 

Creamos un diccionario. Cada elemento índice tiene un elemento valor asignado. A continuación veremos que sucede si tratamos de accesar a un índice no especificado en el diccionario:

>>> dic['a']

>>> dic['c']

Traceback (most recent call last):

File "<pyshell#4>", line 1, in <module>

dic['c']

KeyError: 'c'

 

Al surgir el error podemos encontrar el mensaje pasado, para manejar la posibilidad de que existen estos errores en tiempo real podemos utilizar la orden try seguido de except de la siguiente manera:

 

def func(index):

try:

print dic[index]

except KeyError:

print "Fuera de rango"

Lista de excepciones de Python

Exception

La clase base de las excepciones. Todas las excepciones internas derivan de esta clase. Todas las excepciones definidas por usuario deberían derivarse de esta clase, aunque no es obligatorio (todavía). La función str(), aplicada a una instancia de una clase (o la mayoría de sus clases derivadas) devuelve un valor cadena a partir de sus argumentos o una cadena vacía si no se proporcionaron argumentos al constructor. Si se usa como secuencia, accede a los argumentos proporcionados al constructor (útil para compatibilidad con código antiguo). Los argumentos también están disponibles en el atributo args de la instancia, como tupla.
StandardError
La clase base para todas las excepciones internas excepto SystemExit. StandardError deriva de la clase raíz Exception.
ArithmeticError
La clase base de las excepciones lanzadas por diversos errores aritméticos: OverflowError, ZeroDivisionError, FloatingPointError.
LookupError
La clase base de las excepciones lanzadas cunado una clave o índice utilizado en una correspondencia (diccionario) o secuencia son incorrectos: IndexError, KeyError.
EnvironmentError
La clase base de las excepciones que pueden ocurrir fuera del sistema Python: IOError, OSError. Cuando se crean excepciones de este tipo con una tupla de dos valores, el primer elemento queda disponible en el atributo errno de la instancia (se supone que es un número de error) y el segundo en el atributo strerror (suele ser el mensaje de error asociado). La propia tubpla está disponible en el atributo args. Nuevo en la versión 1.5.2.
Cuando se instancia una excepción EnvironmentError con una tupla de tres elementos, los primeros dos quedan disponibles como en el caso de dos elementos y el tercero queda en el atributo filename. Sin embargo, por compatibilidad con sistemas anteriores, el atributo args contiene sólo una tupla de dos elementos de los dos primeros argumentos del constructor.
El atributo filename es None cuando se cree la excepción con una cantidad de argumentos diferente de 3. Los atributos errno y strerror son también None cuando la instancia no se cree con 2 ó 3 argumentos. En este último caso, args contiene los argumentos del constructor tal cual, en forma de tupla.

Las siguientes excepciones son las realmente lanzadas.

 

AssertionError
Se lanza cuando una sentencia assert es falsa.
AttributeError
Se lanza cuando una referencia o asignación a atributo fracasa (cuando un objeto no tenga referencias o asignaciones a atributos en absoluto, se lanza, TypeError.)
EOFError
Se lanza cuando las funciones internas (input() o raw_input()) alcanzan un final de fichero (EOF) sin leer datos. N.B.: Los métodos read() y readline() de los objetos fichero devuelven una cadena vacía al alcanzar EOF.
FloatingPointError
Se lanza cuando falla una operación de coma flotante. Esta excepción siempre está definida, pero sólo se puede lanzar cuando Python esta configurado con la opción --with-fpectl o se ha definido el símbolo WANT_SIGFPE_HANDLER en el fichero config.h.
IOError
Se lanza cuando una operación de E/S (tal como una sentencia print, la función interna open() o un método de un objeto fichero) fracasa por motivos relativos a E/S, por ejemplo, por no encontrarse un fichero o llenarse el disco.
Esta clase se deriva de EnvironmentError. En la explicación anterior se proporciona información adicional sobre los atributos de instancias de excepción.
ImportError
Se lanza cuando una sentencia import no encuentra la definición del módulo o cuando from ... import no encuentra un nombre a importar.
IndexError
Se lanza cuando un subíndice de una secuencia se sale del rango .Los índices de corte se truncan silenciosamente al rango disponible. Si un índice no es un entero simple, se lanza TypeError.
KeyError
Se lanza cuando no se encuentra una clave de una correspondencia (diccionario) en el conjunto de claves existentes.
KeyboardInterrupt
Se lanza cuando el usuario pulsa la tecla de interrupción (normalmente Control-C o DEL). A lo largo de la ejecución se comprueba si se ha interrumpido regularmente. Las interrupciones ocurridas cuando una función input() o raw_input()) espera datos también lanzan esta excepción.
MemoryError
Se lanza cuando una operación agota la memoria pero aún se puede salvar la situación (borrando objetos). El valor asociado es una cadena que indica qué tipo de operación (interna) agotó la memoria. Obsérvese que por la arquitectura de gestión de memoria subyacente (la función de C malloc()), puede que el intérprete no siempre sea capaz de recuperarse completamente de esta situación. De cualquier modo, se lanza una excepción para que se pueda imprimir una traza, por si la causa fue un programa desbocado.
NameError
Se lanza cuando no se encuentra un nombre local o global. Sólo se aplica a nombre no calificados. El valor asociado es el nombre no encontrado.
NotImplementedError
Esta excepción se deriva de RuntimeError. En clases base definidas por el usuario, los métodos abstractos deberían lanzar esta excepción cuando se desea que las clases derivadas redefinan este método. Nuevo en la versión 1.5.2.
OSError
Esta clase se deriva de EnvironmentError y se usa principalmente como excepción os.error de os. En EnvironmentError hay una descripción de los posibles valores asociados. Nuevo en la versión 1.5.2.
OverflowError
Se lanza cuando el resultado de una operación aritmética es demasiado grande para representarse (desbordamiento). Esto no es posible en los enteros largos (que antes que rendirse lanzarían MemoryError). Por la falta de normalización de la gestión de excepciones de coma flotante en C, la mayoría de las operaciones de coma flotante, tampoco se comprueban. En el caso de enteros normales, se comprueban todas las operaciones que pueden desbordar excepto el desplazamiento a la izquierda, en el que las aplicaciones típicas prefieren perder bits que lanzar una excepción.
RuntimeError
Se lanza cuando se detecta un error que no cuadra en ninguna de las otras categorías. El valor asociado es una cadena que indica qué fue mal concretamente. Esta excepción es mayormente una reliquia de versiones anteriores del intérprete; ya casi no se usa.
SyntaxError
Se lanza cuando el analizador encuentra un error en la sintaxis. Esto puede ocurrir en una sentencia import, en una sentencia exec, en una llamada a la función interna eval() o input(), o al leer el guion inicial o la entrada estándar (por ejemplo, la entrada interactiva).
Si se usan excepciones de clase, las instancias de esta clase tienen disponibles los atributos filename (nombre del fichero), lineno (nº de línea), offset (nº de columna) y text (texto), que ofrecen un acceso más fácil a los detalles. En las excepciones de cadena, el valor asociado suele ser una tupla de la forma (mensaje, (nombreFichero, numLinea, columna, texto)). En las excepciones de clase, str() sólo devuelve el mensaje.
SystemError
Se lanza cuando el intérprete encuentra un error interno, pero la situación no parece tan grave como para perder la esperanza. El valor asociado es una cadena que indica qué ha ido mal (en términos de bajo nivel).
Se debería dar parte de este error al autor o mantenedor del intérprete Python en cuestión. Se debe incluir en el informe la cadena de versión del intérprete Python (sys.version, que también se muestra al inicio de una sesión interactiva), la causa exacta del error y, si es posible, el código fuente del programa que provocó el error.
SystemExit
Lanzada por la función sys.exit(). Si no se captura, el intérprete de Python finaliza la ejecución sin presentar una pila de llamadas. Si el valor asociado es un entero normal, especifica el estado de salida al sistema (se pasa a la función de C exit()), Si es None, el estado de salida es cero (que indica una salida normal sin errores). En el caso de ser de otro tipo, se presenta el valor del objeto y el estado de salida será 1.
Las instancias tienen un atributo code cuyo valor se establece al estado de salida o mensaje de error propuesto (inicialmente None). Además, esta excepción deriva directamente de Exception y no de StandardError, ya que técnicamente no es un error.
Una llamada a sys.exit() se traduce a un error para que los gestores de limpieza final (las cláusulas finally de las sentencias try) se puedan ejecutar y para que un depurador pueda ejecutar un guión sin riesgo de perder el control. Se puede usar la función os._exit() si es total y absolutamente necesario salir inmediatamente (por ejemplo, tras un fork() en el proceso hijo).
TypeError
Se lanza cuando una operación o función interna se aplica a un objeto de tipo inadecuado. El valor asociado es una cadena con detalles de la incoherencia de tipos.
UnboundLocalError
Se lanza cuando se hace referencia a una variable local en una función o método, pero no se ha asignado un valor a dicha variable. Deriva de NameError. Nuevo en la versión 2.0.
UnicodeError
Se lanza cuando se da un error relativo a codificación/descodificación Unicode. Deriva de ValueError. Nuevo en la versión 2.0.
ValueError
Se lanza cuando una operación o función interna recibe un argumento del tipo correcto, pero con un valor inapropiado y no es posible describir la situación con una excepción más precisa, como IndexError.
WindowsError
Se lanza cuando se da un error específico de Windows o el número de error no corresponde a un valor errno. Los valores errno y strerror se crean a partir de los valores devueltos por las funciones GetLastError() y FormatMessage() del API de plataforma de Windows. Deriva de OSError. Nuevo en la versión 2.0.
ZeroDivisionError
Se lanza cuando el segundo argumento de una operación de división o módulo es cero. El valor asociado es una cadena que indica el tipo de operandos y la operación.   

Share This