Captura los fallos previsibles con try/except/else/finally y lanza tus propias excepciones para señalar datos no válidos.
Abrir esta lección en KodokonUn programa real falla: archivo ausente, entrada no válida, red caída. Python señala estas situaciones con excepciones, que interrumpen la ejecución y se propagan por la pila de llamadas hasta que un try/except las captura. El reflejo profesional: capturar la excepción más específica posible, lo más cerca posible del lugar donde sabes qué hacer.
def parse_age(text):
try:
return int(text)
except ValueError:
return None
print(parse_age("34")) # 34
print(parse_age("thirty")) # NoneEl bloque completo tiene cuatro ramas. try contiene el código arriesgado, except gestiona el fallo, else se ejecuta solo si no se lanzó ninguna excepción, y finally se ejecuta en todos los casos - ideal para liberar un recurso o dejar un registro. El interés de else: mantener el try lo más pequeño posible, para ver de un vistazo qué línea puede fallar.
values = ["10", "abc", "25"]
total = 0
for value in values:
try:
number = int(value)
except ValueError:
print(f"Skip : {value}")
else:
total += number
finally:
print(f"Process : {value}")
print(total) # 35Tus funciones también pueden lanzar sus propias excepciones con raise, en cuanto un dato recibido no es válido: mejor fallar de inmediato con un mensaje claro que producir un resultado incorrecto. Define una clase dedicada que herede de Exception: quien la llame podrá capturarla específicamente, sin interceptar por accidente otros errores.
class EmptyCartError(Exception):
pass
def checkout(items):
if not items:
raise EmptyCartError("Empty cart.")
return round(sum(items), 2)
try:
print(checkout([]))
except EmptyCartError as error:
print(f"Error : {error}")