Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Depurador de Python:mejore sin esfuerzo sus habilidades de depuración

La depuración del código Python, para muchos de nosotros, se reduce a agregar declaraciones de impresión y tratar de razonar lo que sucede en función de la salida. No es ideal, pero por alguna razón, la gente simplemente no quiere tocar el depurador de Python.

Tabla de contenidos

  • Uso de impresión para depurar código
  • Establecer un punto de interrupción del depurador de Python
  • Uso del depurador de Python
  • Comandos del depurador de Python
  • Sigue aprendiendo

Uso de impresión para depurar código

Si eres una de esas personas que usan print para la depuración, No te estoy juzgando . Aprender Python es difícil. La programación es difícil. La vida es dura. Entiendo que aprender otra cosa más parece aburrido si ya estás luchando. Y agregar esa declaración de impresión a su código... es simplemente más fácil. Una pequeña confesión:todavía lo hago todo el tiempo también. No es tan malo como algunos lo hacen parecer.

Habiendo dicho eso, te voy a enseñar un pequeño truco que será tan fácil como agregar declaraciones de impresión a tu código. Sin embargo, este truco te otorga infinitos poderes de depuración y te permitirá conquistar el mundo, en caso de que lo necesites.

Establecer un punto de interrupción del depurador de Python

No necesita un IDE para depurar su código correctamente. Este truco siempre funciona, incluso en el editor más simple, e incluso en Jupyter Notebooks.

El truco se reduce a esto:establecer un punto de interrupción usando la instrucción breakpoint() . Puede insertarlo en su código, sin importar qué editor o IDE esté usando, en el punto en el que normalmente colocaría esa molesta declaración de impresión.

Entonces, ¿qué sucede cuando lo haces? ¡Vamos a averiguar! Cree un programa simple, como el siguiente:

def add_two(x):
    return x + 2
for i in range(1, 10):
    a = add_two(i)
    breakpoint()
    print(a)

Cuando ejecuta esto, y no importa si lo hace en REPL, desde la línea de comandos o en su IDE, se le coloca en el depurador de Python llamado PDB. ¿Pero ahora qué?

Uso del depurador de Python

Cuando inicio el pequeño programa de arriba, esto es lo que sucede:

$ python3 breakpointing.py
> /home/erik/breakpointing.py(7)<module>()
-> print(a)
(Pdb)_

Hay un par de cosas que ver aquí:

  • Muestra el archivo actual que se inició (breakpointing.py )
  • Después de eso, muestra el siguiente comando que estaba a punto de ejecutarse, pero fue interrumpido por la llamada a breakpoint() .
  • Y finalmente, vemos el indicador de pdb, esperando nuestra entrada.

El depurador de Python es en realidad un shell de Python en pleno funcionamiento, al igual que el REPL.

En este punto, podemos inspeccionar el entorno actual. Veamos cuál es el valor de a es ahora mismo:

(Pdb) print(a)
3
(Pdb) print(i)
1

En lugar de imprimir, también puede usar el comando p específico de pdb, así:

(Pdb) p a
3
(Pdb_ p i
1

Ejecutar la siguiente línea

Entonces, ¿qué pasa si queremos ejecutar la siguiente línea de código? Hay dos opciones:

  • Con s o step , ejecutas la línea actual. El depurador se detiene en la primera ocasión posible después de eso.
  • Con n o next , también ejecuta la línea actual, pero ahora el depurador continúa hasta que se alcanza la siguiente línea de la función actual.

Para dejar esto más claro:step entra felizmente en una llamada de función y rompe dentro de esa función. Por el contrario, next ejecuta la función hasta que regresa y se interrumpe en la siguiente línea.

Otros depuradores e IDE también llaman a esto "pasar a" (en lugar de paso) y "pasar por encima" (en lugar de siguiente).

Ahora usemos estos dos:

$ python3 breakpointing.py
-> print(a)
(Pdb) s
3
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) n
-> breakpoint()
(Pdb) n
-> print(a)
(Pdb) n
4
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) s
--Call--
-> def add_two(x):
(Pdb) s
-> return x + 2
(Pdb) s
--Return--
5
-> return x + 2
(Pdb) s
-> breakpoint()
(Pdb)

Como puede ver, primero pasamos por alto la llamada a add_two con n . La segunda vez, entramos en la función con s .

Comandos del depurador de Python

Hay más comandos que puedes probar por tu cuenta. No los enumeraré todos, solo los más útiles:

  • h (ayuda):imprime todos los comandos disponibles. También toma un argumento, p. h c te dice lo que c el comando sí
  • c (continuar):empezar a ejecutar hasta el siguiente punto de interrupción
  • l (lista):muestra el código fuente alrededor de la línea actual
  • p :imprime el resultado de la siguiente expresión. Puedes usar esto en lugar de llamar a print()
  • pp :letra bonita, útil para imprimir estructuras de datos como diccionarios
  • reiniciar:reiniciar el programa actual

Para obtener la documentación completa, diríjase a la página del depurador de Python, donde se enumeran todos los comandos.

Sigue aprendiendo

Aunque esto puede ser muy útil, vale la pena sumergirse en el depurador que ofrece su IDE. Si es usuario de VSCode, escribí un tutorial sobre cómo depurar el código de Python en VSCode.


python

  1. Entrada, salida e importación de Python
  2. Optimice sus procesos de mantenimiento para mejorar la eficiencia
  3. Declaración Python Print():cómo imprimir con ejemplos
  4. Cadenas de Python:reemplazar, unir, dividir, invertir, mayúsculas y minúsculas
  5. Python time.sleep():agregue retraso a su código (ejemplo)
  6. Python New Line:Cómo imprimir SIN Newline en Python
  7. Las flotas conectadas mejoran sus resultados
  8. Cómo los prototipos mejoran su proceso de fabricación
  9. 5 maneras de mejorar sus piezas de chapa
  10. 3 consejos para mejorar su plan de mantenimiento de equipos
  11. Consejos y consideraciones:aprenda a mejorar sus habilidades de diseño de PCB