Saltar al contenido
🐍 Curso de Python
/

Módulo 1 · Lección 16 de 59

break y continue

Salir de un bucle antes de tiempo, saltarse una vuelta, y la cláusula else de los bucles que casi nadie conoce.

⏱ 10 min de lectura

La condición de un while se comprueba solo en un sitio: arriba, antes de cada vuelta. Eso a veces no encaja con lo que necesitas. Quieres parar en cuanto encuentres lo que buscabas, en medio del bloque, sin esperar a que termine la iteración. O quieres descartar una vuelta concreta y seguir con las demás.

Python tiene dos instrucciones de una sola palabra para esos dos casos.

break: salir del bucle#

break termina el bucle inmediatamente. El programa continúa por la primera línea que haya después del bloque:

python
contador = 1

while contador <= 10:
        if contador == 4:
                print("Corto aquí.")
        break
    print(f"Vuelta {contador}")
    contador += 1

print("Fin.")
Salida en pantalla
Vuelta 1
Vuelta 2
Vuelta 3
Corto aquí.
Fin.

La condición del while decía hasta 10, pero el bucle se ha detenido en la cuarta vuelta. Y fíjate en que no se ha ejecutado el resto del bloque: break no espera al final de la iteración, corta ahí mismo.

continue: saltar a la vuelta siguiente#

continue abandona lo que quede del bloque y vuelve arriba, a comprobar la condición otra vez. El bucle sigue vivo:

python
numero = 0

while numero < 10:
        numero += 1
    if numero % 2 == 0:
                continue
    print(numero)
Salida en pantalla
1
3
5
7
9

Los pares llegan al continue y nunca alcanzan el print. Los impares se lo saltan y se imprimen.

InstrucciónQué hace con la iteración actualQué hace con el bucle
breakLa cortaLo termina
continueLa cortaLo continúa por la vuelta siguiente

El patrón while True con break#

Aquí está la razón principal por la que existe break. Recuerda el validador de la lección anterior:

python
edad_texto = input("Edad: ").strip()

while not edad_texto.isdigit():
        print("Eso no es un número entero.")
    edad_texto = input("Edad: ").strip()

El input estaba escrito dos veces, con su strip() y su prompt duplicados. Si mañana cambias el texto de la pregunta tienes que acordarte de cambiarlo en los dos sitios. La versión idiomática mueve la comprobación al medio del bucle:

python
while True:
        edad_texto = input("Edad: ").strip()
    if edad_texto.isdigit():
                break
    print("Eso no es un número entero.")

edad = int(edad_texto)
print(f"Gracias. Has escrito {edad}.")
Salida en pantalla
Edad: abc
Eso no es un número entero.
Edad: 34
Gracias. Has escrito 34.

Se lee como el proceso mental real: pregunta, comprueba, si vale sal, si no avisa y vuelve a preguntar. Un solo input, una sola condición y la salida exactamente donde se decide.

Memoriza esta estructura. Es la forma estándar de pedir datos en Python y la vas a escribir cientos de veces:

python
while True:
        respuesta = input("Pregunta: ").strip()
    if respuesta_es_valida:
                break
    print("Mensaje de error")

La cláusula else de los bucles#

Esto es una particularidad de Python que sorprende incluso a quien lleva tiempo con el lenguaje: un bucle puede llevar else.

No significa lo mismo que en un if. El else de un bucle se ejecuta cuando el bucle termina de forma natural, sin haber pasado por ningún break. Si hubo break, se salta.

Sirve para un caso muy concreto: buscar algo y hacer una cosa distinta si no lo encuentras. Busquemos el primer guion bajo de un nombre de fichero:

python
texto = "informe_2024_final.txt"
posicion = 0

while posicion < len(texto):
        if texto[posicion] == "_":
                print(f"Primer guion bajo en la posición {posicion}")
        break
    posicion += 1
else:
        print("No hay ningún guion bajo en el texto.")
Salida en pantalla
Primer guion bajo en la posición 7

Lo encuentra, ejecuta el break y el else no se ejecuta. Ahora con un texto donde no hay nada que encontrar, sin cambiar ni una línea del bucle:

python
texto = "informe.txt"
posicion = 0

while posicion < len(texto):
        if texto[posicion] == "_":
                print(f"Primer guion bajo en la posición {posicion}")
        break
    posicion += 1
else:
        print("No hay ningún guion bajo en el texto.")
Salida en pantalla
No hay ningún guion bajo en el texto.

El bucle ha recorrido el texto entero, la condición se ha vuelto falsa y entonces sí entra el else.

La alternativa, si el else no te resulta legible, es una variable bandera:

python
encontrado = False
posicion = 0

while posicion < len(texto):
        if texto[posicion] == "_":
                encontrado = True
        break
    posicion += 1

if not encontrado:
        print("No hay ningún guion bajo en el texto.")

Hace lo mismo con dos líneas más. Las dos formas son correctas; usa la que entiendas de un vistazo.

Ejemplo completo#

Un control de acceso con intentos limitados, que junta break, el else del bucle y el operador condicional:

acceso.py
INTENTOS_MAXIMOS = 3
intentos = 0

while intentos < INTENTOS_MAXIMOS:
        clave = input("Contraseña: ").strip()

    if clave == "python2024":
                print("Acceso concedido.")
        break

    intentos += 1
    restantes = INTENTOS_MAXIMOS - intentos
    print(f"Incorrecta. Te queda{'' if restantes == 1 else 'n'} {restantes} intento{'' if restantes == 1 else 's'}.")
else:
        print("Cuenta bloqueada. Contacta con el administrador.")
Salida en pantalla
Contraseña: hola
Incorrecta. Te quedan 2 intentos.
Contraseña: adios
Incorrecta. Te queda 1 intento.
Contraseña: mal
Incorrecta. Te quedan 0 intentos.
Cuenta bloqueada. Contacta con el administrador.

Acierta antes y el else no aparece:

Salida en pantalla
Contraseña: hola
Incorrecta. Te quedan 2 intentos.
Contraseña: python2024
Acceso concedido.

Esa es la utilidad del else aquí: distinguir "ha salido porque ha acertado" de "ha salido porque se le han acabado los intentos", sin ninguna variable extra.

No abuses#

break y continue son cómodos, y por eso es fácil pasarse. Un bucle con cuatro break repartidos y dos continue obliga a leerlo entero, de arriba abajo y varias veces, para saber en qué condiciones termina. La condición del while deja de significar nada.

Reglas prácticas:

  • Un break por bucle es lo normal. Dos, revisable. Tres, reescríbelo.
  • Si el break está en la última línea del bloque, no hace falta: pon la condición en el while.
  • Un continue al principio del bloque para descartar casos se lee bien. En medio del bloque, casi nunca.
  • Si te cuesta explicar con una frase cuándo termina tu bucle, simplifícalo.