Lección 18 · 18 de 20
Errores con try y except · Python
Capture los errores de su programa de Python con try y except para que no se detenga: números mal escritos, divisiones por cero y claves que faltan.

Cuando algo sale mal, Python lanza una excepción y, si nadie la atiende, el programa se detiene con un mensaje de error. try permite intentarlo: si algo dentro del bloque falla, Python salta al except en vez de pararse.
En el primer bucle, int("seven") y int("3.5") lanzan un ValueError. El except ValueError: escribe un aviso y el bucle sigue con el siguiente texto, así que el total suma solo 42 y 15.
Un try puede tener varios except, uno por tipo de error. En slices_each(), dividir entre 0 da ZeroDivisionError, y dividir entre un texto, TypeError. El bloque else solo se ejecuta si no hubo error: es donde se escribe el resultado bueno.
Con except KeyError as error: se guarda el propio error en una variable para mostrarlo. Al pedir la clave "juice", que no existe en el diccionario, el mensaje dice exactamente cuál falta.
Código · main.py
# int() fails with text that is not a number: try catches it.answers = ["42", "seven", "3.5", "15"]total = 0for text in answers: try: number = int(text) total += number print(f"'{text}' -> {number}") except ValueError: print(f"'{text}' is not a whole number, skipped")print("Total:", total)# Different errors, different except blocks.def slices_each(pizzas, people): try: slices = pizzas * 8 // people except ZeroDivisionError: print("Nobody to share with!") except TypeError: print("People must be a number.") else: # runs only if there was no error print(f"{people} people get {slices} slices each")slices_each(3, 4)slices_each(3, 0)slices_each(3, "four")# as gives you the error itself, with its message.prices = {"tea": 1.5, "coffee": 1.8}try: print(prices["juice"])except KeyError as error: print("No price for", error)Salida · python3 main.py
'42' -> 42 'seven' is not a whole number, skipped '3.5' is not a whole number, skipped '15' -> 15 Total: 57 4 people get 6 slices each Nobody to share with! People must be a number. No price for 'juice'
Para recordar
- El código que puede fallar va dentro de
try:. except TipoDeError:atiende solo ese tipo de error.else:se ejecuta si no hubo ningún error.except ... as e:da acceso al error y su mensaje.- Capture errores concretos, no todos a la vez.
Ejercicio
Escriba una función ask_number() que lea un número con input() y, si no es válido, lo vuelva a pedir dentro de un while hasta que lo sea. Pruébela con un input.txt con dos líneas erróneas y una buena.