Manejo de errores en Python

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 sea ValueError o ZeroDivisionError.

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 bloque try.

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 como ZeroDivisionError 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 o TypeError 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 bloque try.

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.

YouTube Video