HOWTO · Python

Cómo solucionar el error `SyntaxError: 'break' outside loop` en Python

Este tutorial analiza el error de interrupción del bucle externo en Python.

En esta página

Un SyntaxError: 'break' outside loop significa que Python encontró una instrucción break sin un bucle for o while que la contenga y pueda recibirla. Mueve la instrucción al bucle que debe detener. Una instrucción if puede decidir cuándo detenerse, pero por sí sola no crea un bucle.

Qué significa SyntaxError: 'break' outside loop

Python comprueba dónde aparece break al analizar un archivo. Este ejemplo coloca break dentro de un if sin ningún bucle que lo contenga; compilar el código fuente detecta el error de sintaxis para que el propio ejemplo pueda ejecutarse:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

source = """if ready:
    break"""
try:
    compile(source, "<example>", "exec")
except SyntaxError as error:
    print(f"{type(error).__name__}: {error.msg}")
SyntaxError: 'break' outside loop

Python rechaza el código fuente representado antes de que el programa empiece. Lo mismo ocurre dentro de una función si no hay ningún bucle que contenga la instrucción. El diagnóstico describe un problema de ubicación, no un valor que pasó a ser verdadero mientras se ejecutaba el programa.

El error puede pasar desapercibido cuando el código está anidado: la indentación puede hacer que break parezca asociado a un bucle, aunque esté alineado fuera de él. Comprueba la indentación real y el bloque for o while que lo rodea. Un break dentro de una función auxiliar no puede salir de un bucle perteneciente a la función que la llamó; cada cuerpo de función se analiza por separado.

Por qué break debe estar dentro de un bucle

break termina de inmediato el bucle que lo contiene más directamente. Python permite usarlo en un bucle for o while, incluso dentro de un if anidado en ese bucle. Un if solo selecciona qué instrucciones se ejecutan. No repite instrucciones y, por tanto, no ofrece ningún bucle del que break pueda salir.

Por ejemplo, if count == 3: break no es válido por sí solo. Coloca esa condición dentro del bucle cuya iteración quieres detener. Si hay bucles anidados, break solo sale del más cercano; la ejecución continúa después de ese bucle, todavía dentro de cualquier bucle externo. Esta distinción importa al decidir dónde indentar la instrucción.

Soluciona el error moviendo break dentro del bucle

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

for number in range(5):
    if number == 3:
        break
    print(number)
0
1
2

Tanto la condición como break están dentro del bloque for, así que la instrucción tiene un bucle del que salir. En tu propio código, mueve juntos la condición y la instrucción de parada al cuerpo del bucle que realiza el trabajo. No cambies la indentación a ciegas: compara la posición de la instrucción con el encabezado del bucle y con las demás instrucciones que deben repetirse.

Si el error de sintaxis persiste, revisa la función y el bucle completos que contienen la instrucción, no solo las pocas líneas que rodean a break. La cláusula else de un bucle se ejecuta cuando el cuerpo termina sin un break; está fuera del cuerpo del bucle, así que break no debe colocarse ahí. Un else asociado a un if tampoco crea un bucle. Comprueba que el fragmento de código no se haya copiado fuera del bucle al trasladarlo a otra función.

Usa una bandera o refactoriza cuando eso aclare el bucle

A veces la decisión de continuar se toma antes de cada iteración o depende de varias partes del bucle. En ese caso, una bandera puede formar parte de la condición del bucle y evitar por completo break:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

keep_going = True
number = 0
while keep_going and number < 5:
    if number == 3:
        keep_going = False
    else:
        print(number)
    number += 1
0
1
2

La bandera controla si comienza otra iteración; el else evita que se imprima el valor que detiene el bucle. Una bandera resulta útil cuando representa un estado que también necesita otro código. Si hay una única condición clara para detenerse dentro de un bucle, break suele ser más sencillo y directo.

Otra opción es reestructurar el bucle para que su condición exprese cuándo debe continuar el trabajo. Por ejemplo, un bucle while puede comprobar un resultado de búsqueda o una variable de estado en su encabezado, y un bucle for puede procesar una secuencia limitada sin una instrucción de parada aparte. Elige la estructura que permita ver con más claridad la regla de parada. No añadas una bandera solo para evitar un break bien ubicado: el estado adicional puede dificultar la comprensión del flujo de control.

En resumen, mantén break dentro del bucle del que debe salir. Usa una bandera cuando el estado de continuación tenga sentido más allá de una sola rama, o refactoriza cuando la condición del bucle pueda expresar la tarea con mayor claridad.