El manejo de excepciones es una parte crucial de la programación, permitiéndonos anticipar y gestionar errores que pueden ocurrir durante la ejecución de un programa. Python proporciona un marco robusto para manejar excepciones, lo que nos permite escribir código más seguro y fiable.
¿Qué es una Excepción?
Una excepción es un evento que ocurre durante la ejecución de un programa y que interrumpe el flujo normal de las instrucciones. Esto podría deberse a una variedad de razones, como errores de sintaxis, errores de lógica, o problemas imprevistos como archivos faltantes o problemas de red.
Manejo Básico de Excepciones
En Python, usamos las sentencias try
y except
para manejar excepciones. El bloque try
contiene el código que podría lanzar una excepción, y el bloque except
contiene el código que se ejecutará si ocurre una excepción.
Resultado:
No se puede dividir por cero.
Múltiples Excepciones
Podemos manejar múltiples excepciones utilizando múltiples bloques except
. Cada bloque except
puede manejar un tipo específico de excepción.
Resultado: (dependiendo de la entrada)
No se puede dividir por cero.
Por favor, introduce un número válido.
El Bloque else
El bloque else
se ejecuta si no ocurre ninguna excepción en el bloque try
. Esto es útil para el código que debería ejecutarse si el bloque try
es exitoso.
Resultado:
La división fue exitosa, el resultado es: 5.0
El Bloque finally
El bloque finally
se ejecuta independientemente de si ocurre una excepción o no. Esto es útil para realizar tareas de limpieza, como cerrar archivos o liberar recursos.
Resultado:
El archivo no fue encontrado.
El archivo ha sido cerrado.
Lanzar Excepciones
También podemos lanzar manualmente excepciones utilizando la sentencia raise
. Esto es útil cuando queremos generar una excepción específica bajo ciertas condiciones.
Resultado:
La edad no puede ser negativa.
Excepciones Comunes en Python
La documentación de Python contiene una buena lista de las excepciones integradas y cómo funcionan, pero aquí hay una lista de las más comunes:
- Exception: La clase base para la mayoría de las demás excepciones.
- AttributeError: Se lanza cuando una referencia o asignación de atributo falla.
- IOError: Se lanza cuando una operación de E/S (como una declaración print, la función incorporada open() o un método de un objeto de archivo) falla por una razón relacionada con E/S, por ejemplo, “archivo no encontrado” o “disco lleno”.
- ImportError: Se lanza cuando una declaración import no encuentra la definición del módulo o cuando una declaración from … import no encuentra un nombre que se va a importar.
- IndexError: Se lanza cuando un subíndice de secuencia está fuera de rango.
- KeyError: Se lanza cuando una clave de mapeo (diccionario) no se encuentra en el conjunto de claves existentes.
- KeyboardInterrupt: Se lanza cuando el usuario presiona la tecla de interrupción (normalmente Control-C o Delete).
- NameError: Se lanza cuando un nombre local o global no se encuentra.
- OSError: Se lanza cuando una función devuelve un error relacionado con el sistema.
- SyntaxError: Se lanza cuando el analizador encuentra un error de sintaxis.
- TypeError: Se lanza cuando una operación o función se aplica a un objeto de tipo inapropiado. El valor asociado es una cadena que da detalles sobre la incompatibilidad de tipos.
- ValueError: Se lanza cuando una operación o función incorporada recibe un argumento que tiene el tipo correcto pero un valor inapropiado, y la situación no está descrita por una excepción más precisa como IndexError.
- ZeroDivisionError: Se lanza cuando el segundo argumento de una operación de división o módulo es cero.
Resultado:
Error: can only concatenate str (not "int") to str
list index out of range
'c'
invalid literal for int() with base 10: 'a'
division by zero
2.0
1.0
unsupported operand type(s) for +: 'int' and 'str'
name 'x' is not defined
No module named 'modulo_inexistente'
El manejo de excepciones es esencial para construir aplicaciones robustas y confiables. Nos permite anticipar problemas, manejar errores de manera controlada y mantener una buena experiencia de usuario. Es importante siempre pensar en las posibles excepciones que pueden ocurrir y manejarlas adecuadamente.