En este tema, aprenderemos cómo manejar excepciones en Python. Las excepciones son eventos que ocurren durante la ejecución de un programa y que pueden interrumpir el flujo normal de las instrucciones. Python proporciona mecanismos para manejar estas excepciones de manera que el programa pueda continuar su ejecución o finalizar de manera controlada.
Conceptos Clave
- Excepciones: Eventos que ocurren durante la ejecución de un programa y que interrumpen el flujo normal de las instrucciones.
- Bloques
try
yexcept
: Estructuras que permiten manejar excepciones. - Bloque
else
: Se ejecuta si no se produce ninguna excepción. - Bloque
finally
: Se ejecuta siempre, independientemente de si se produjo una excepción o no.
Bloques try
y except
El manejo de excepciones en Python se realiza utilizando los bloques try
y except
. La sintaxis básica es la siguiente:
try: # Código que puede producir una excepción pass except ExceptionType: # Código que se ejecuta si ocurre una excepción de tipo ExceptionType pass
Ejemplo Práctico
Vamos a ver un ejemplo práctico donde intentamos dividir dos números. Si el divisor es cero, se produce una excepción ZeroDivisionError
.
try: numerator = 10 denominator = 0 result = numerator / denominator print("El resultado es:", result) except ZeroDivisionError: print("Error: No se puede dividir por cero.")
Explicación:
- El bloque
try
contiene el código que puede producir una excepción. - Si se produce una excepción
ZeroDivisionError
, el control pasa al bloqueexcept
, donde se maneja la excepción.
Múltiples Excepciones
Puedes manejar múltiples excepciones utilizando varios bloques except
:
try: value = int(input("Introduce un número: ")) result = 10 / value print("El resultado es:", result) except ZeroDivisionError: print("Error: No se puede dividir por cero.") except ValueError: print("Error: Entrada no válida. Por favor, introduce un número entero.")
Bloques else
y finally
El bloque else
se ejecuta si no se produce ninguna excepción, y el bloque finally
se ejecuta siempre, independientemente de si se produjo una excepción o no.
try: value = int(input("Introduce un número: ")) result = 10 / value except ZeroDivisionError: print("Error: No se puede dividir por cero.") except ValueError: print("Error: Entrada no válida. Por favor, introduce un número entero.") else: print("El resultado es:", result) finally: print("El bloque finally se ejecuta siempre.")
Ejercicio Práctico
Ejercicio 1
Escribe un programa que solicite al usuario que introduzca dos números y luego intente dividir el primero por el segundo. Maneja las excepciones ZeroDivisionError
y ValueError
.
def dividir_numeros(): try: num1 = float(input("Introduce el primer número: ")) num2 = float(input("Introduce el segundo número: ")) resultado = num1 / num2 except ZeroDivisionError: print("Error: No se puede dividir por cero.") except ValueError: print("Error: Entrada no válida. Por favor, introduce números.") else: print("El resultado de la división es:", resultado) finally: print("Operación completada.") dividir_numeros()
Solución
def dividir_numeros(): try: num1 = float(input("Introduce el primer número: ")) num2 = float(input("Introduce el segundo número: ")) resultado = num1 / num2 except ZeroDivisionError: print("Error: No se puede dividir por cero.") except ValueError: print("Error: Entrada no válida. Por favor, introduce números.") else: print("El resultado de la división es:", resultado) finally: print("Operación completada.") dividir_numeros()
Resumen
En esta sección, hemos aprendido cómo manejar excepciones en Python utilizando los bloques try
, except
, else
y finally
. Estos mecanismos nos permiten escribir programas más robustos y controlados, capaces de manejar errores de manera efectiva y continuar su ejecución o finalizar de manera controlada. En la próxima sección, exploraremos cómo lanzar nuestras propias excepciones personalizadas.
Curso de Programación en Python
Módulo 1: Introducción a Python
- Introducción a Python
- Configuración del Entorno de Desarrollo
- Sintaxis de Python y Tipos de Datos Básicos
- Variables y Constantes
- Entrada y Salida Básica
Módulo 2: Estructuras de Control
- Sentencias Condicionales
- Bucles: for y while
- Herramientas de Control de Flujo
- Comprensiones de Listas
Módulo 3: Funciones y Módulos
- Definición de Funciones
- Argumentos de Función
- Funciones Lambda
- Módulos y Paquetes
- Visión General de la Biblioteca Estándar
Módulo 4: Estructuras de Datos
Módulo 5: Programación Orientada a Objetos
Módulo 6: Manejo de Archivos
- Lectura y Escritura de Archivos
- Trabajo con Archivos CSV
- Manejo de Datos JSON
- Operaciones de Archivos y Directorios
Módulo 7: Manejo de Errores y Excepciones
- Introducción a las Excepciones
- Manejo de Excepciones
- Lanzamiento de Excepciones
- Excepciones Personalizadas
Módulo 8: Temas Avanzados
- Decoradores
- Generadores
- Administradores de Contexto
- Concurrencia: Hilos y Procesos
- Asyncio para Programación Asíncrona
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con unittest
- Desarrollo Guiado por Pruebas
- Técnicas de Depuración
- Uso de pdb para Depuración
Módulo 10: Desarrollo Web con Python
- Introducción al Desarrollo Web
- Fundamentos del Framework Flask
- Construcción de APIs REST con Flask
- Introducción a Django
- Construcción de Aplicaciones Web con Django
Módulo 11: Ciencia de Datos con Python
- Introducción a la Ciencia de Datos
- NumPy para Computación Numérica
- Pandas para Manipulación de Datos
- Matplotlib para Visualización de Datos
- Introducción al Aprendizaje Automático con scikit-learn