Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Dominando el Manejo de Excepciones en Python: try, except, else y finally Explicados

Dominando el Manejo de Excepciones en Python: try, except, else y finally Explicados

Esta guía recorre los constructos de manejo de excepciones de Python con snippets de código prácticos y consejos de mejores prácticas.

Video: Manejo de Excepciones en Python (try..except..finally)

Excepciones en Python

Python lanza excepciones integradas cuando ocurre un error en tiempo de ejecución. El intérprete detiene el bloque actual de código y propaga la excepción hacia arriba en la pila de llamadas hasta encontrar un manejador. Si no existe ninguno, el programa termina e imprime un traceback.

Considera la siguiente cadena de llamadas: A llama a B, que llama a C. Si C lanza una excepción no manejada localmente, la excepción burbujea hacia B y luego a A. Las excepciones no manejadas resultan en un fallo abrupto del programa.

Capturando Excepciones en Python

Para interceptar una excepción, coloca el código potencialmente inseguro dentro de un bloque try. La cláusula except contiene la lógica que se ejecuta cuando ocurre una excepción.

Ejemplo conciso que demuestra el flujo:

# Importar sys para inspeccionar el tipo de excepción
import sys
random_list = ['a', 0, 2]
for entry in random_list:
    try:
        print("La entrada es", entry)
        r = 1 / int(entry)
        break
    except:
        print("¡Uy!", sys.exc_info()[0], "ocurrió.")
        print("Siguiente entrada.")
    print()
print("El reciproco de", entry, "es", r)

Salida

La entrada es a ¡Uy! <class 'ValueError'> ocurrió. Siguiente entrada. La entrada es 0 ¡Uy! <class 'ZeroDivisionError'> ocurrió. Siguiente entrada. La entrada es 2 El reciproco de 2 es 0.5

El código itera sobre random_list. Si la conversión a int o la división falla, el bloque except maneja el error, lo registra y pasa al siguiente elemento. Cuando ocurre una conversión exitosa, el bucle se rompe e imprime el reciproco.

Como todas las excepciones integradas heredan de Exception, puedes capturarlas genéricamente:

# Importar sys para inspeccionar el tipo de excepción
import sys
random_list = ['a', 0, 2]
for entry in random_list:
    try:
        print("La entrada es", entry)
        r = 1 / int(entry)
        break
    except Exception as e:
        print("¡Uy!", e.__class__, "ocurrió.")
        print("Siguiente entrada.")
    print()
print("El reciproco de", entry, "es", r)

La salida es idéntica, pero el manejador ahora referencia la clase de excepción específica vía e.__class__.

Capturando Excepciones Específicas en Python

Capturar todas las excepciones ampliamente puede enmascarar bugs y dificultar la depuración. En su lugar, lista solo los tipos de excepción que esperas.

Un bloque try puede contener múltiples cláusulas except; solo se ejecuta la primera que coincida. Ejemplo:

try:
    # código que puede lanzar error
    pass
except ValueError:
    # manejar ValueError
    pass
except (TypeError, ZeroDivisionError):
    # manejar TypeError o ZeroDivisionError
    pass
except Exception:
    # fallback para cualquier otra excepción
    pass

Lanzando Excepciones en Python

Más allá de excepciones automáticas, los desarrolladores pueden lanzar errores explícitamente usando la sentencia raise. Opcionalmente, pasa un mensaje para clarificar la razón.

raise KeyboardInterrupt  # Traceback: KeyboardInterrupt
raise MemoryError("Este es un argumento")  # Traceback: MemoryError: Este es un argumento
try:
    a = int(input("Ingresa un entero positivo: "))
    if a <= 0:
        raise ValueError("¡Eso no es un número positivo!")
except ValueError as ve:
    print(ve)

Cláusula else en try de Python

La cláusula opcional else se ejecuta solo cuando el bloque try completa sin lanzar excepción. Este patrón mantiene el código de camino exitoso separado del manejo de errores.

Ejemplo: imprimir el reciproco de un número par.

# programa para imprimir el reciproco de números pares
try:
    num = int(input("Ingresa un número: "))
    assert num % 2 == 0
except:
    print("¡No es un número par!")
else:
    reciproco = 1 / num
    print(reciproco)

Salida al ingresar un número impar:

Ingresa un número: 1 ¡No es un número par!

Salida al ingresar un número par:

Ingresa un número: 4 0.25

Ten en cuenta que si num es cero, ZeroDivisionError se lanza en el bloque else y no es capturado por la cláusula except precedente.

try…finally en Python

La cláusula finally garantiza que el código de limpieza se ejecute independientemente de si ocurrió una excepción. Es esencial al trabajar con recursos externos como archivos, conexiones de red o GUIs.

Uso típico con manejo de archivos:

try:
    f = open("test.txt", encoding='utf-8')
    # realizar operaciones de archivo
finally:
    f.close()

El archivo siempre se cierra, incluso si surge un error durante el procesamiento.

python

  1. Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
  2. Manejo de excepciones en C++: Guía práctica con try, catch, throw
  3. Palabras clave e identificadores en Python: Dominando palabras reservadas y convenciones de nomenclatura
  4. Sentencias, indentación y comentarios en Python: Guía clara
  5. Variables, constantes y literales en Python – Guía completa
  6. Dominando conversión y casting de tipos en Python: Guía completa
  7. Dominando E/S e importación de módulos en Python: Guía práctica
  8. Dominando la sentencia pass en Python: Guía práctica
  9. Entendiendo variables globales, locales y nonlocal en Python
  10. Dominando Operaciones de Directorios y Archivos en Python
  11. Dominando el Manejo de Excepciones en Python: try, except, else y finally Explicados