Cómo manejar excepciones en Python (intenta-excepto-finalmente)
Aprenda a manejar excepciones en Python usando los bloques try, except, else y finalmente. Escriba código Python libre de errores y resistente a fallos.
Descripción general
El software robusto debe estar preparado para manejar condiciones inesperadas, como archivos faltantes, entradas de usuario no válidas, fallas en la base de datos o interrupciones en la red. Cuando ocurre un error en Python, genera una excepción. Si no se controlan, las excepciones detienen su programa inmediatamente e imprimen una pila de rastreo.
La herramienta principal de Python para gestionar errores de tiempo de ejecución es el bloque "try-except". Usted coloca código que podría generar un error dentro del bloque `try` y define el código de manejo de errores dentro de uno o más bloques `except`. Se recomienda encarecidamente especificar la clase de excepción exacta (como `ValueError` o `ZeroDivisionError`), ya que detectar todas las excepciones genéricas (`except:`) puede enmascarar errores.
Para que su excepción fluya más expresiva, Python proporciona dos bloques adicionales: "else" y "finally". El bloque `else` se ejecuta solo si no se generaron excepciones en el bloque `try`, lo cual es útil para código que solo debería ejecutarse en caso de éxito. El bloque `finalmente` se ejecuta *siempre*, independientemente de si ocurrió una excepción, lo que lo convierte en el lugar perfecto para limpiezas como cerrar archivos o conexiones de bases de datos.
Código y salida de ejecución
Este script demuestra un manejo sólido de errores en Python usando try, excepto, else y finalmente.
def divide_numbers(a, b):
try:
# Code that might raise an exception
result = a / b
except ZeroDivisionError:
# Handling a specific exception
print("Error: Cannot divide by zero!")
except TypeError:
# Handling another exception type
print("Error: Inputs must be numbers!")
else:
# Run only if try block succeeded
print(f"Success! Result of {a}/{b} is {result}")
finally:
# Runs no matter what
print("Division attempt completed.")
divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.Implementación paso a paso
- Coloque el código que podría fallar dentro de un bloque de prueba.
- Detecte tipos de errores específicos con bloques excepto ExceptionType: para manejar las fallas con elegancia.
- Utilice else para el código que debe ejecutarse solo en bloques de prueba exitosos.
- Úselo finalmente para garantizar que las acciones de limpieza se ejecuten independientemente de los errores.
Preguntas frecuentes
¿Puedo detectar múltiples excepciones en un solo bloque excepto?
Sí, puedes pasarlos como una tupla: excepto (ValueError, TypeError) como e:.
¿Cómo planteo mis propias excepciones?
Utilice la palabra clave rise seguida de la instancia de excepción: rise ValueError("Valor de configuración no válido").
Temas relacionados
Aprenda cómo convertir una cadena a un número entero en Python usando la función int(). Maneje los errores de forma segura y convierta números de binario, octal o hexadecimal.
Cómo leer un archivo en PythonAprenda a leer archivos en Python. Domine la declaración abierta, la línea de lectura, las líneas de lectura y el manejo seguro de excepciones de archivos.
Cómo escribir en un archivo en PythonAprenda a escribir texto en archivos en Python. Domine la diferencia entre los modos de escritura ("w") y anexar ("a") con administradores de contexto seguros.
Recursos recomendados de Python
Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.
Bucles de Python
Aprenda a utilizar bucles de Python para iterar sobre datos. Domine los bucles for, while, rompa, continúe y realice bucles con ejemplos interactivos.
Hoja de trucos sobre métodos de cadenas de Python
Una guía de referencia completa para la manipulación de cadenas de Python. Domine el formateo, la búsqueda, la división, el reemplazo y la verificación de las propiedades de las cadenas.
Python vs JavaScript: ¿Qué lenguaje de programación es mejor?
Una comparación completa entre Python y JavaScript. Explore las diferencias de sintaxis, el rendimiento, los casos de uso (backend frente a frontend) y ejemplos de codificación.