Guía completa de depuración en Python | De lo básico a técnicas y herramientas prácticas, explicación exhaustiva

1. ¿Qué es la depuración?

La depuración es el proceso de descubrir y corregir errores (bugs) en un programa. No solo en Python, sino en cualquier programa, la depuración es indispensable. Las habilidades de depuración mejoran la calidad y confiabilidad del programa, y sirven como base para un desarrollo eficiente.

Objetivo de la depuración

El objetivo de la depuración es identificar y corregir los problemas ocultos en el código. En última instancia, se busca que el programa funcione de manera precisa y eficiente.

Tipos de errores comunes en Python

Vamos a ver los tipos de errores frecuentes en Python, junto con sus causas y métodos de solución.

  • SyntaxError: Es un error de sintaxis. Ocurre cuando hay errores en los símbolos o falta de dos puntos, etc., es decir, cuando la gramática del código está equivocada.
  • TypeError: Es un error debido a diferencias de tipos. Por ejemplo, ocurre al intentar sumar un entero y una cadena, es decir, al realizar operaciones entre tipos de datos diferentes.
  • NameError: Es un error que ocurre cuando se llama a una variable o función no definida. También puede surgir por errores de ortografía.
  • IndexError: Ocurre al intentar acceder a un índice fuera del rango de una lista o tupla.
  • ValueError: Ocurre cuando se pasa un valor inadecuado a una función o método.

Entender estos tipos de errores y abordarlos adecuadamente es el primer paso en la depuración.

2. Técnicas de depuración en Python

En Python, se soportan diversas técnicas de depuración. A continuación, se explican métodos representativos.

Depuración utilizando la instrucción print

El método más básico y conveniente es usar la instrucción print. Se pueden mostrar y verificar valores de variables específicas o el progreso del procesamiento en la consola.

Ejemplo de uso

def add_numbers(a, b):
    result = a + b
    print(f"Debug: result = {result}")  # Instrucción print para depuración
    return result

add_numbers(2, 3)

Ventajas y limitaciones

  • Ventajas: No se necesita configuración ni preparación, se puede usar inmediatamente en cualquier lugar.
  • Limitaciones: El uso excesivo de instrucciones print reduce la legibilidad del código, por lo que no es adecuado para bugs complejos.

Uso del módulo pdb

Al usar pdb, el depurador estándar de Python, es posible pausar el código y verificar detalladamente el flujo de ejecución.

Uso básico

  1. Configuración de puntos de interrupción: Se configura un punto de interrupción en la línea que se desea depurar con pdb.set_trace().
  2. Ejecución: Al ejecutar el script, se pausa en el punto de interrupción configurado.
  3. Entrada de comandos: Se avanza en la depuración con los siguientes comandos.

Comandos principales

  • n: Avanzar a la siguiente línea (step over)
  • s: Entrar en la función (step in)
  • c: Continuar hasta el punto de interrupción o fin
  • p

     

    : Mostrar el valor de la variable
import pdb

def calculate_total(a, b):
    pdb.set_trace()  # Pausa aquí
    result = a + b
    return result

calculate_total(5, 3)

Depuración utilizando IDE

Los entornos de desarrollo integrados (IDE) compatibles con Python tienen funciones de depuración aún más convenientes. En particular, Visual Studio Code y PyCharm son populares entre los desarrolladores de Python.

Funciones de depuración de Visual Studio Code

  1. Configuración de puntos de interrupción: Hacer clic en la línea que se desea depurar para configurar el punto de interrupción.
  2. Inicio de depuración: Seleccionar «Run» → «Iniciar depuración».
  3. Verificación de variables: Se pueden verificar los valores de las variables durante la ejecución.

Funciones de depuración de PyCharm

侍エンジニア塾

3. Consejos para una depuración efectiva

Se presentan consejos y métodos para optimizar la depuración.

Lectura y uso de mensajes de error

Los mensajes de error de Python muestran el tipo de error y el lugar donde ocurre. Interpretar correctamente el contenido de los mensajes de error contribuye a resolver problemas de manera temprana.

Utilizar logging

El logging es un método más adecuado para la depuración que las sentencias print. Utilizando el módulo logging, se pueden registrar eventos y errores que ocurren durante la ejecución del código.

import logging

logging.basicConfig(level=logging.DEBUG)

def divide(a, b):
    logging.debug(f"Divide function called with a = {a}, b = {b}")
    if b == 0:
        logging.error("Division by zero!")
        return None
    return a / b

divide(10, 0)

El logging no solo es útil en la fase de desarrollo, sino también para rastrear problemas en el entorno de producción.

Introducción de pruebas unitarias

Las pruebas unitarias previenen la ocurrencia de errores debido a cambios en el código. A continuación, se muestra un ejemplo utilizando el módulo unittest.

import unittest

def add_numbers(a, b):
    return a + b

class TestAddNumbers(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add_numbers(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add_numbers(-2, -3), -5)

if __name__ == '__main__':
    unittest.main()

Registrar los pasos para reproducir el bug

Si se puede reproducir el bug, es más fácil identificar la causa del problema. Cuanto mayor sea la reproducibilidad, más rápido se descubrirá la causa y más fácil será encontrar otros bugs similares.

4. Introducción a las herramientas de depuración

Aquí introducimos herramientas de depuración útiles en Python.

Módulo pdb

pdb es un depurador disponible de forma estándar. La configuración de puntos de interrupción utilizando set_trace() es una característica destacada.

Visual Studio Code

Es un IDE gratuito con funciones de depuración abundantes para Python. Dado que se puede operar mediante una interfaz gráfica, incluso los principiantes pueden realizar la depuración fácilmente.

Características

  • Configuración de puntos de interrupción
  • Monitoreo en tiempo real de variables
  • Ejecución paso a paso

PyCharm

Es un IDE específico para Python con funciones de depuración enriquecidas. Es ideal para proyectos a gran escala o desarrollo en equipo.

Características

  • Opciones de depuración potentes
  • Monitoreo en tiempo real de variables
  • Operaciones detalladas en puntos de interrupción

Módulo de logging (logging)

logging permite capturar logs de ejecución detallados, y es particularmente útil al registrar logs de errores. También se puede aprovechar para rastrear problemas durante el desarrollo o en operación.

年収訴求

5. Mejores prácticas de depuración

A continuación se presentan las mejores prácticas para optimizar la depuración y mejorar la calidad del código.

Mejorar la legibilidad del código

El uso de nombres de variables y funciones claros hace que el código sea más legible y la depuración más fácil.

Utilizar control de versiones

Al utilizar Git y similares para gestionar el historial del código, se facilita el seguimiento de las causas de los errores.

Práctica del desarrollo impulsado por pruebas (TDD)

Al escribir las pruebas primero, se reduce la tasa de ocurrencia de errores y se minimiza el trabajo de depuración.

Realizar revisiones de código

Al revisar con otros desarrolladores, se pueden descubrir errores que pasan desapercibidos y puntos de mejora en el diseño.

Uso de herramientas de seguimiento de errores

Al usar Jira o GitHub Issues, entre otros, para gestionar los errores, es posible prevenir su recurrencia y verificar el estado de las correcciones.

6. Resumen

La depuración de Python no se limita a la mera corrección de errores, sino que también contribuye a mejorar la calidad general del programa. Utilice las técnicas y mejores prácticas introducidas en este artículo para avanzar en la depuración de manera eficiente. Al incorporar las herramientas y técnicas de depuración adecuadas, el trabajo de desarrollo se optimizará, permitiendo un descubrimiento y corrección de errores más rápidos.

Mejorar las habilidades de depuración también aumenta la confiabilidad del programa, convirtiéndose en un paso hacia el éxito a largo plazo del proyecto.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール