- 1 - Depuración y optimziación del código en python para hacer mejor nuestro código
- 2 - Depuración de código en python
- 3 - Librería de pdb de python
- 4 - Código con breakpoint
- 5 - Vamos a trabajar con la terminal
- 6 - Realizando un listado en pdb
- 7 - Nuestro primer break
- 8 - C el código que nos ayuda a contnuar
- 9 - Mostrando por pantalla las variables
- 10 - Conclusión:
Depuración y optimziación del código en python para hacer mejor nuestro código
En esta lección vamos a ver como podemos optimziar nustro código, una parte importante de la codificación donde realizamos el proceso de programacion y luego corregimos los errores. Este proceso también lo podemos conocer como debugging porque es un trabajo que realmente es eliminar bugs (errores en programación).
Depuración de código en python
En python para depurar solemos utilizar utilizar un depurador, que en Python el rey por estrella es pdb (python DeBugger). Con la herramienta pdb es posible insertar puntos de parada dentro del código fuente sin necesidad de usar un IDE o herramientas externas. Cómo cualquier otro depurador, pdb está dotado de las capacidades necesarias para poder imprimir el valor de las variables en un determinado punto de la ejecució del código. Para poder ver mejor el ejemplo tenemos que crear uno donde lo podamos seguir y ver de mejor manera.
# demo_pdb.py
from dataclasses import dataclass
@dataclass
class Product:
sku: str
price: float
def apply_discount(price: float, discount_pct: float) -> float:
# BUG intencional: si discount_pct viene como "20" en lugar de 0.20,
# el cálculo es incorrecto.
return price - (price * discount_pct)
def parse_discount(user_input: str) -> float:
# El usuario introduce "20" para 20%
return float(user_input)
def total_cart(products: list[Product], discount_input: str) -> float:
discount = parse_discount(discount_input)
subtotal = sum(p.price for p in products)
total = apply_discount(subtotal, discount)
return round(total, 2)
def main():
cart = [
Product("A-001", 19.99),
Product("B-002", 5.50),
Product("C-003", 13.25),
]
discount_input = "20" # el usuario cree que es 20%
total = total_cart(cart, discount_input)
print("TOTAL:", total)
if __name__ == "__main__":
main()
Como veis aquí tenemos el código y he dejado marcado el error que tiene el código para que podamos hacer un seguimiento más fácil.
Librería de pdb de python
La librería de pdb ya viene instalado en nuestro python por defecto, es decir, no tenemos que hacer ningún pip o uv add en nuestra treminal o nuestro código.
Lo cierto que es algo que tenemos que agradecer ya que como podemos comprobar nos viene nuestro lenguaje muy bien preparado para poderlo utilizar no solamente en IDEs.
Si bien es cierto ya viene instalado, normalmente las IDEs es con lo que suelen trabajar por debajo para la ejecución de nuestro código, herramientas tan famosas como Visual Studio Code o incluso Windsorf.
Para nuestra tarea vamos a trabajar con los siguientes códigos una vez habramos desde la terminal:
l(list): muestra el código alrededor.n(next): ejecutal la siguiente línea (sin entrar en funciones).s(step): entra dentro de la función.p variable(print): imprime variables.c(continue): continúa hasta el siguiente breakpoint/fin.q(quit): quitar
Estos van a ser los códigos que vamos a usar dentro de nuestro debugging que vamos a explicar ahora paso a paso.
Código con breakpoint
Con este código que hemos marcado, el *breakopoint* lo que tenemos es una zona de pausa de nuestro código, una forma de trabajar la depuración de nuestro código si queremos tener un control en cierto paso o pasos dentro del código que has realizado.
from dataclasses import dataclass
@dataclass
class Product:
sku: str
price: str
def apply_discount(price:float, discount_pct: float )-> float:
# BUG intenacional: si discoutn_pct viene como "20" en lugar de 0.20
# el cálculo es incorrecto
return price - (price * discount_pct)
def parse_discount(user_input:str)-> float:
# El usuario introduce "20" para el 20%
return float(user_input)
def total_cart(products: list[Product], discount_input: str) -> float:
discount = parse_discount(discount_input)
breakpoint() #Esto lo añadimos después y es desde la versión 3.7 de Python
subtotal = sum(p.price for p in products)
total = apply_discount(subtotal, discount)
return round(total, 2)
def main():
cart = [
Product("A-001", 19.99),
Product("B-002", 5.50),
Product("C-003", 13.25),
]
discount_input = "20" # el usuario cree que el 20%
total = total_cart(cart, discount_input)
print("Total: ", total)
if __name__=="__main__":
main()
Vamos a trabajar con la terminal
En el código hemos insertado el código como estamos viendo en la función de total_cart para que se detenga en ese punto y tener un control.

En la imagen estamos arrancando nuestro código (es el mismo que tenemos arriba en el ejemplo) y para ello necesitamos escribir dentro del directorio donde tenemos el código lo siguiente:
python3 -m pbd <nombre-de-tu-codigo>-> esto es lo que tenemos si estamos en Linux, en el caso de usar Windows seguramente con py o python asecas lo puedes usar sin problemas. En la imagen vemos como arranca y nos aparece en la termianl para escribir con el símbolo de(pdb)para que podamos utilizar cualquiera de los códigos que hemos visto anteriormente.
Realizando un listado en pdb
Cuando introducimos l lo que llama un listado, nos enumera el código fuente del archivo que estamos debuggeando.
Nuestro primer break
En este caso el código que vamos a introducir es la b más el nombre de variable que en este caso hemos usado el nombre de la función, pero podíamos usar el número de línea, que es lo que normalmente utiliza por ejemplo Visual Studio Code.
Este breakopoint lo podemos poner incluso, en proyectos más modulares con condicionales o incluso el nombre del archivo más número de línea por ejemplo.
En el caso de los breakopoint te voy a poner un pequeño listado que te sirva de como o cuando usar cada uno:
- Si es una demo en vivo: b número de líneas
- Código Propio: breakopoint()
- Depurar función concreta: b nombre de la función
- Bugs intermitentes: b linea, condición
C el código que nos ayuda a contnuar
Nos ayudamos de c para decir a nustro debugger que continue hasta el breakopoint real o bien hasta el siguiente que tengamos, pero en este caso es hasta el único que tenemos.

Mostrando por pantalla las variables
Pdb nos ayuda a saber que tenemos en una variables y es que si utilizamos p <variable> podemos saber que es lo que nos mostraría esa variable en cuestión. Esto es muy útil para trabajar los ya comentados brekpoints con condicionales.

Conclusión:
Cómo podéis ver este debugger es muy útil y puede ser una gran herramienta que si bien es cierto en los IDEs podemos trabajarlo de manera nativa con estos, si en un momento dado os pasa como a mi que empezáis a buscar otros caminos donde expandir tus sitios de codear o bien tienes que hacer algo más personalizado siempre viene bien conocer esta librería que ya viene dentro de Python y como podéis usarlo para controlar vuestro código.
¿Listo para hacer crecer tu negocio?
Analicemos tu proyecto y definamos la estrategia perfecta para alcanzar tus objetivos
Solicitar consultoría gratuita