Manejo de errores en Python
En este artículo, explicaremos el manejo de errores en Python.
YouTube Video
Manejo de errores en Python
El manejo de errores en Python se realiza principalmente usando las palabras clave try
, except
, else
y finally
. Usar estas estructuras te permite responder adecuadamente cuando ocurre un error en tu programa. A continuación, explicaremos cómo usar cada una de ellas.
Bloque try
Dentro del bloque try
, escribes el código que deseas ejecutar. Si ocurre un error dentro de este bloque, la ejecución del programa pasa inmediatamente al bloque except
.
1try:
2 # Code that may raise an error (division by zero, for example)
3 #number = int(input("Enter a number: "))
4 number = int("abc")
5 result = 10 / number
6 print("Result:", result)
7except ValueError as e:
8 # Handle invalid input (e.g. non-numeric input)
9 print("Invalid input. Please enter a whole number.")
10 print(f"Value error: {e}")
11except ZeroDivisionError as e:
12 # Handle division by zero error
13 print("Cannot divide by zero!")
14 print(f"Zero division error: {e}")
- Este código es un ejemplo de cómo detectar errores en un bloque
try
y manejarlos adecuadamente capturando ya seaValueError
oZeroDivisionError
.
Bloque except
En el bloque except
, escribes el código que se ejecutará cuando ocurra una excepción (error) específica. También puedes capturar excepciones específicas dependiendo del tipo de excepción que ocurra.
1try:
2 #number = int(input("Enter a number: "))
3 number = 0
4 result = 10 / number
5 print("Result:", result)
6except ZeroDivisionError as e:
7 print("Cannot divide by zero!")
8 print(f"Zero division error: {e}")
9except ValueError as e:
10 print("Input was not a valid integer.")
11 print(f"Value error: {e}")
- Este código es un ejemplo de ejecutar diferentes manejos para cada tipo de excepción en el bloque
except
cuando ocurre un error en el bloquetry
.
Manejo de múltiples excepciones juntas
Especifique una tupla cuando varias clases de excepciones puedan compartir la misma lógica de manejo.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- Este código es un ejemplo de capturar tanto
IndexError
comoZeroDivisionError
juntos y manejar las excepciones de la misma forma.
Capturar excepciones incondicionalmente
Omita el argumento de except
si desea manejar todos los tipos de excepciones en un solo bloque.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- Sin embargo, manejar excepciones específicas en lugar de capturar incondicionalmente todas las excepciones es más útil para encontrar errores y para la depuración. Siempre que sea posible, manejar explícitamente solo las excepciones anticipadas como
ValueError
oTypeError
aumentará la robustez de tu código.
Bloque else
El bloque else
solo se ejecuta si no ocurren errores dentro del bloque try
.
1try:
2 #number = int(input("Enter a number: "))
3 number = 5
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
- Este código es un ejemplo donde el bloque
else
se ejecuta solo si no ocurre ningún error en el bloquetry
.
Bloque finally
El bloque finally
se utiliza para escribir código que siempre se ejecutará al final, sin importar si ocurrió un error en el bloque try
. Es útil para liberar recursos o realizar tareas de limpieza.
1try:
2 #number = int(input("Enter a number: "))
3 number = int("abc")
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
14finally:
15 # This block will always execute, regardless of whether an exception was raised
16 print("Execution completed.")
- Este código es un ejemplo que demuestra que el bloque
finally
se ejecuta independientemente de si ocurre una excepción o no.
La palabra clave raise
También es posible generar una excepción utilizando la palabra clave raise
cuando no se cumplen ciertas condiciones en el código existente.
1def divide(a, b):
2 if b == 0:
3 raise ValueError("Cannot divide by zero.")
4 return a / b
5
6try:
7 result = divide(10, 0)
8except ValueError as e:
9 print(f"Error: {e}")
- Este código es un ejemplo de lanzar explícitamente una excepción usando la palabra clave
raise
cuando no se cumple una condición.
Conclusión
Al manejar errores de esta forma, puedes prevenir fallos en el programa, mostrar mensajes apropiados al usuario y continuar con el procesamiento posterior del programa.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.