TEC · Técnica 7 · Archivos y errores

34.Depuración

El proceso de encontrar y corregir errores en un programa, leyendo los mensajes de error, siguiendo el código paso a paso y revisando los valores de las variables.

¿Qué es?

Depurar (debug) es encontrar y corregir los errores de un programa. Todos los programadores pasan buena parte de su tiempo depurando: no es señal de que lo hiciste mal, es parte del trabajo.

Es como ser detective: el programa da una pista (un mensaje de error o un resultado raro) y tú sigues las pistas hasta encontrar la línea culpable.

Tres tipos de errores

Tipo Cuándo aparece Ejemplo Cómo se nota
De sintaxis Antes de ejecutar Falta un : o un paréntesis Python no arranca y señala la línea
De ejecución Mientras se ejecuta División entre cero, variable inexistente El programa se detiene con un traceback
Lógico Siempre «funciona»… Promedio mal calculado El resultado es incorrecto, sin mensaje de error

Sintaxis (pseudocódigo / Python)

Leer un traceback de Python

# ✗ Incorrecto a propósito, para ver el mensaje
def promedio(lista):
    return sum(lista) / len(lista)

calificaciones = []
print(promedio(calificaciones))
Traceback (most recent call last):
  File "notas.py", line 5, in <module>
    print(promedio(calificaciones))
  File "notas.py", line 2, in promedio
    return sum(lista) / len(lista)
ZeroDivisionError: division by zero

Se lee de abajo hacia arriba:

  1. Última línea: el tipo de error y su descripción (ZeroDivisionError: division by zero).
  2. Arriba: dónde ocurrió (línea 2, dentro de promedio).
  3. Más arriba: desde dónde se llamó (línea 5).

Herramientas

Herramienta PSeInt Python
Prueba de escritorio En papel En papel
Ver valores Escribir temporal print() temporal
Paso a paso Ejecutar paso a paso y ver variables Depurador de VS Code o breakpoint()
Punto de interrupción — Clic a la izquierda del número de línea en VS Code

print de depuración

def promedio(lista):
    print("DEBUG lista =", lista, "len =", len(lista))   # temporal
    if not lista:
        return 0
    return sum(lista) / len(lista)

print(promedio([8, 9, 10]))
print(promedio([]))

Ejemplo guiado

Problema: esta función debería contar los aprobados (6 o más), pero da un número menor al esperado.

# ✗ Error lógico
def contar_aprobados(calificaciones):
    aprobados = 0
    for c in calificaciones:
        if c > 6:
            aprobados += 1
    return aprobados

print(contar_aprobados([6, 7, 5, 6, 10]))   # muestra 2, se esperaban 4

1. Reproducir: con [6, 7, 5, 6, 10] sabemos que la respuesta es 4 (6, 7, 6 y 10).

2. Seguir paso a paso (prueba de escritorio o depurador):

c c > 6 aprobados
6 False 0
7 True 1
5 False 1
6 False 1
10 True 2

3. Encontrar la causa: los 6 no se cuentan: la condición debería ser >=.

4. Corregir y volver a probar:

def contar_aprobados(calificaciones):
    aprobados = 0
    for c in calificaciones:
        if c >= 6:
            aprobados += 1
    return aprobados

print(contar_aprobados([6, 7, 5, 6, 10]))

Salida esperada: 4

Usar el depurador de VS Code

  1. Abre el archivo y haz clic a la izquierda del número de la línea del if (aparece un punto rojo).
  2. Presiona F5 y elige «Python File».
  3. El programa se detiene en esa línea: en el panel Variables ves c y aprobados.
  4. Usa F10 (siguiente línea) para avanzar y observa cómo cambian.

Errores comunes

Buenas prácticas

  • Reproduce el error con los datos más sencillos posibles.
  • Lee el mensaje completo y la línea indicada.
  • Explica el código en voz alta (a un compañero o a un patito de hule): muchas veces el error aparece al explicarlo.
  • Prueba seguido: escribir 10 líneas y probar es mejor que escribir 200 y luego buscar el error.
  • Busca el mensaje de error en la documentación o en internet, entendiendo la solución antes de copiarla.
  • Usa control de versiones (Git) para volver a la última versión que funcionaba.

Material descargable

Aún no hay material descargable para este tema. Pronto habrá cuadernillos, manuales o laboratorios.

Referencias

© solutions_ · Fundamentos de programación · 34 Depuración