Menu
Coddy logo textTech

¿Qué es un error lógico?

Un error lógico es un fallo en el razonamiento de un programa que le hace producir un resultado incorrecto sin fallar ni mostrar ningún mensaje de error. El código es válido y todas las líneas se ejecutan, pero no hace lo que el programador pretendía.

Por Kevin Spektor, Cofundador y CTO

Actualizado el 24 de septiembre de 2026

Tres notas de examen, 80, 90 y 100, tienen una media de 90. Este programa se ejecuta sin una sola queja e imprime otra cosa:

Average: 203.33333333333334

Python hizo exactamente lo que dice la línea. La división se hace antes que la suma, así que solo la última nota se dividió entre 3, y el resultado es 80 + 90 + 33,33. El programador quería escribir (scores[0] + scores[1] + scores[2]) / 3. Añade los paréntesis y el programa imprime Average: 90.0.

Por qué no aparece ningún mensaje de error

Un ordenador comprueba si el código es válido, no si es correcto. El parser comprueba la gramática, lo que detecta un error de sintaxis. El runtime comprueba cada operación, lo que detecta un error en tiempo de ejecución como dividir entre cero. Sumar tres números y dividir uno de ellos entre 3 es gramática válida y una operación legal, así que ambas comprobaciones pasan.

Solo la persona que escribió el programa sabe que tenía que calcular una media. Esa intención no está en ninguna parte del código, así que ninguna herramienta puede comparar el resultado con ella. Un error lógico es la distancia entre lo que le dijiste al ordenador que hiciera y lo que querías que hiciera.

Causas comunes de los errores lógicos

La mayoría de los errores lógicos salen de una lista corta de patrones.

  • Errores por uno (off-by-one). Un bucle se ejecuta una vez de más o de menos. range(1, 5) produce 1, 2, 3 y 4, porque el final queda excluido. Consulta iteración.
  • Precedencia de operadores. a + b / 2 divide solo b, como en la media de arriba.
  • La comparación equivocada. < donde hacía falta <=, o and donde hacía falta or. Las condiciones son expresiones booleanas, y un solo operador equivocado invierte el resultado para algunas entradas.
  • Condiciones en el orden equivocado. En una cadena de if y elif, gana la primera condición verdadera, así que una comprobación amplia colocada primero oculta las más concretas que tiene debajo.
  • La variable equivocada. Actualizar total dentro de un bucle pero imprimir subtotal.
  • Suposiciones sobre los números. 0.1 + 0.2 == 0.3 es False en Python, Java y JavaScript, porque los números de coma flotante son aproximaciones. 7 // 2 es 3, no 3,5.

Este es el fallo del orden de las condiciones. Una nota de 95 debería ser una A:

D
D
F

95 es mayor o igual que 60, así que gana la primera rama y nunca se llega al elif. Pon primero el umbral más alto y todos los resultados salen bien.

Tipos de errores en programación

Los errores de programación se suelen clasificar en tres tipos según cuándo aparecen y quién los notifica.

Error de sintaxisError en tiempo de ejecuciónError lógico
Cuándo apareceAntes de que el programa se ejecuteMientras se ejecutaMientras se ejecuta, o nunca se nota
Qué lo detectaEl parser o el compiladorEl runtime o el sistema operativoUna persona o una prueba
¿Se ejecuta el programa?NoHasta la línea que fallaSí, hasta el final
Mensaje de errorSí, con número de líneaSí, con un tracebackNinguno
Ejemplo en Pythonif x > 3 sin los dos puntos10 / 0a + b / 2 para una media
Cómo lo encuentrasLeyendo el mensajeLeyendo el tracebackComparando la salida con una respuesta conocida

Algunos libros de texto enumeran más tipos, y la mayoría caben dentro de estos tres. Un error de tipo que rechaza el compilador de Java, como incompatible types: String cannot be converted to int, se detecta en tiempo de compilación igual que un error de sintaxis, y algunos libros lo llaman error semántico. Un error de enlazado ocurre en el último paso de la construcción de un programa en C o C++, cuando una función se declaró pero su código no aparece por ninguna parte. Los errores aritméticos, de recursos y de archivos, como dividir entre cero, quedarse sin memoria o abrir un archivo que no existe, son todos errores en tiempo de ejecución. Algunos cursos usan además el término "error semántico" como otro nombre del error lógico, así que comprueba qué significado usa tu libro.

Cómo encontrar un error lógico

  1. Prueba con una respuesta que ya conozcas. Calcula a mano el resultado correcto para una entrada pequeña y compáralo. Tres notas son más fáciles de revisar que tres mil.
  2. Imprime los valores intermedios. Imprimir score y la rama elegida, o el contador del bucle en cada vuelta, muestra el paso exacto en el que la realidad se separa de tu plan.
  3. Avanza paso a paso con un depurador. Poner un punto de interrupción y ejecutar línea a línea hace lo mismo sin tocar el código.
  4. Prueba los extremos. Prueba 0, 1, el valor más grande, una lista vacía y el umbral exacto (60 y 90 en el ejemplo de las notas).
  5. Explica el código en voz alta. Describir cada línea a otra persona, o a un patito de goma, te obliga a decir lo que la línea hace en lugar de lo que supones que hace.

Un assert convierte una respuesta conocida en una comprobación automática. No hace nada cuando la condición es verdadera y detiene el programa cuando es falsa:

Traceback (most recent call last):
  File "main.py", line 10, in <module>
    assert grade(95) == "A", "95 should be an A"
           ^^^^^^^^^^^^^^^^
AssertionError: 95 should be an A

Una prueba que falla convierte un error lógico silencioso en uno ruidoso con número de línea. Esa es toda la idea de las pruebas unitarias.

Errores lógicos en otros lenguajes

Los patrones son los mismos en todas partes, pero cada lenguaje tiene sus propias trampas. En JavaScript, "5" + 3 es la cadena "53", mientras que "5" - 3 es el número 2, así que un valor leído de un formulario como texto puede sumar mal sin ningún error. En C, if (x = 5) asigna 5 a x y siempre es verdadero. Clang lo advierte por defecto (using the result of an assignment as a condition without parentheses), pero aun así compila y se ejecuta, así que toma las advertencias del compilador tan en serio como los errores.

Qué leer después

Compara esta página con las de error de sintaxis y error en tiempo de ejecución para ver cómo se notifica cada tipo. Los bucles son donde viven los errores por uno, así que la página de iteración y la guía de Python sobre bucles for son buenas lecturas para seguir. Para practicar la búsqueda de resultados incorrectos en ejercicios reales, prueba el curso de Python.

Preguntas frecuentes

¿Qué diferencia hay entre un error de sintaxis y un error lógico?
Un error de sintaxis rompe la gramática del lenguaje, así que el programa se rechaza antes de ejecutarse y recibes un mensaje con un número de línea. Un error lógico sigue la gramática a la perfección y se ejecuta hasta el final, pero el resultado es incorrecto y no hay ningún mensaje. Un error de sintaxis lo encuentras leyendo el mensaje; un error lógico, comprobando la salida.
¿Qué es un error lógico en Python?
Es código Python que se ejecuta sin traceback pero da una respuesta incorrecta. Ejemplos típicos son range(1, 5) cuando querías del 1 al 5 incluido, a + b / 2 cuando querías (a + b) / 2 y ramas if comprobadas en el orden equivocado. Python no puede detectarlos, porque no tiene forma de saber qué querías decir.
¿Cuáles son los 5 tipos de errores en programación?
Una lista habitual de cinco es: errores de sintaxis, errores semánticos (de tipo), errores de enlazado, errores en tiempo de ejecución y errores lógicos. Los tres primeros aparecen mientras se construye el programa, los de tiempo de ejecución aparecen mientras se ejecuta y los lógicos solo se notan como resultados incorrectos. Muchos cursos enseñan solo tres: de sintaxis, de ejecución y lógicos.
¿Un error lógico es un bug?
Sí. Un bug es cualquier defecto que hace que un programa se comporte de forma distinta a la prevista, y los errores lógicos son el tipo más común. Los fallos y los mensajes de error también son bugs, pero se anuncian solos, mientras que un error lógico tiene que detectarlo una persona o una prueba.
¿Por qué los errores lógicos son difíciles de encontrar?
Porque nada los señala. No hay número de línea ni mensaje, y el resultado incorrecto puede parecer plausible, como una media de 203 para tres notas de examen que nadie vuelve a revisar. Se encuentran comparando la salida con una respuesta que ya conoces, y por eso importan las pruebas con resultados conocidos.
Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR