El manejo de excepciones en Python permite gestionar situaciones excepcionales que pueden surgir durante la ejecución del programa. Esto ayuda a evitar que el programa se detenga abruptamente y proporciona la oportunidad de manejar los errores de manera controlada.

Estructura Básica de try y except:

try:
    # Código que puede generar una excepción
    resultado = 10 / 0
except ZeroDivisionError:
    # Manejo específico para la excepción ZeroDivisionError
    print("¡Error! División por cero.")
except Exception as e:
    # Manejo general de excepciones
    print(f"¡Error! {e}")
else:
    # Se ejecuta si no hay excepciones
    print("La operación se realizó con éxito.")
finally:
    # Se ejecuta siempre, independientemente de si hubo excepciones o no
    print("Finalizando el bloque try-except.")

Uso Práctico:

1. División por Cero:

def division_segura(dividendo, divisor):
    try:
        resultado = dividendo / divisor
    except ZeroDivisionError:
        print("¡Error! División por cero.")
        resultado = None
    return resultado

# Uso de la función
resultado = division_segura(10, 0)
print(resultado)  # Resultado: None

2. Conversión de Tipo de Datos:

def convertir_a_entero(valor):
    try:
        entero = int(valor)
    except ValueError:
        print("¡Error! No se pudo convertir a entero.")
        entero = None
    return entero

# Uso de la función
numero_entero = convertir_a_entero("abc")
print(numero_entero)  # Resultado: None

3. Lectura de Archivo:

def leer_archivo(nombre_archivo):
    try:
        with open(nombre_archivo, 'r') as archivo:
            contenido = archivo.read()
    except FileNotFoundError:
        print(f"¡Error! El archivo '{nombre_archivo}' no existe.")
        contenido = None
    except Exception as e:
        print(f"¡Error! {e}")
        contenido = None
    return contenido

# Uso de la función
contenido_archivo = leer_archivo("archivo_no_existente.txt")
print(contenido_archivo)  # Resultado: None