Python 3.7 incluye una mejora que facilita a los desarrolladores el acceso al depurador de programas de Python (Pdb). Antes para poder invocar al depurador era necesario incluir en un programa la siguiente línea:
import pdb; pdb.set_trace()
Esto ya no es necesario. Ahora para depurar el código simplemente tendremos que insertar la función breakpoint() en el lugar o lugares donde se quieran establecer los puntos de interrupción. Con este cambio se persigue facilitar la tarea, hacerla más cómoda e intuitiva.
Después, una vez iniciado el proceso de depuración todo funciona como hasta ahora: cuando se alcanza un punto de interrupción se hace una parada temporal y se devuelve el control al usuario para ejecutar el programa paso a paso (n) o hasta el siguiente punto de interrupción (c), consultar el valor de las variables, etc. Veamos un caso práctico.
El siguiente ejemplo contiene una lista de valores a sumar. Para ello, se recorren, uno a uno, los distintos elementos y se van sumando a la variable acumula, que inicialmente tiene el valor 0. El programa sumando.py genera una excepción cuando se alcanza el cuarto elemento ('a') por ser de tipo cadena; y por no poder sumarse a un valor numérico. En este caso para la depuración se incluye el punto de interrupción justo antes de la suma del elemento en curso para permitir evaluar su valor.
sumando.py:
import pdb; pdb.set_trace()
Esto ya no es necesario. Ahora para depurar el código simplemente tendremos que insertar la función breakpoint() en el lugar o lugares donde se quieran establecer los puntos de interrupción. Con este cambio se persigue facilitar la tarea, hacerla más cómoda e intuitiva.
Después, una vez iniciado el proceso de depuración todo funciona como hasta ahora: cuando se alcanza un punto de interrupción se hace una parada temporal y se devuelve el control al usuario para ejecutar el programa paso a paso (n) o hasta el siguiente punto de interrupción (c), consultar el valor de las variables, etc. Veamos un caso práctico.
El siguiente ejemplo contiene una lista de valores a sumar. Para ello, se recorren, uno a uno, los distintos elementos y se van sumando a la variable acumula, que inicialmente tiene el valor 0. El programa sumando.py genera una excepción cuando se alcanza el cuarto elemento ('a') por ser de tipo cadena; y por no poder sumarse a un valor numérico. En este caso para la depuración se incluye el punto de interrupción justo antes de la suma del elemento en curso para permitir evaluar su valor.
sumando.py:
lista = [2, 1, 3, 'a', 4] acumula = 0 for valor in lista: breakpoint() acumula+=valor print(acumula)
Para iniciar la depuración, ejecutar:
$ python3 sumando.py
Una vez iniciada, el programa avanzará hasta el punto de interrupción. Después, si escribimos el nombre de alguna de las variables (valor o acumula) y presionamos [return] obtendremos su valor actual. A continuación, al pulsar 'c' y [return] el programa mostrará el resultado de la primera suma y completará un ciclo hasta alcanzar de nuevo el punto de interrupción. Si repetimos la acción y vamos consultando la variable valor observaremos que el error se produce cuando se alcanza el cuarto elemento de la lista:
Para obtener ayuda de otras opciones del depurador escribir 'h' y [return]. Para ampliar la información de ayuda de alguna opción escribir: 'h' [opción] y [return]. Y para salir del depurador escribir 'exit', 'quit' o 'q' y [return].
Para ejecutar el programa omitiendo la depuración:
$ PYTHONBREAKPOINT=0 python3 sumando.py
Y para ejecutar el programa con el depurador de consola PuDB:
$ PYTHONBREAKPOINT=pudb.set_trace python3 sumando.py
$ python3 sumando.py
Una vez iniciada, el programa avanzará hasta el punto de interrupción. Después, si escribimos el nombre de alguna de las variables (valor o acumula) y presionamos [return] obtendremos su valor actual. A continuación, al pulsar 'c' y [return] el programa mostrará el resultado de la primera suma y completará un ciclo hasta alcanzar de nuevo el punto de interrupción. Si repetimos la acción y vamos consultando la variable valor observaremos que el error se produce cuando se alcanza el cuarto elemento de la lista:
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
Para obtener ayuda de otras opciones del depurador escribir 'h' y [return]. Para ampliar la información de ayuda de alguna opción escribir: 'h' [opción] y [return]. Y para salir del depurador escribir 'exit', 'quit' o 'q' y [return].
Para ejecutar el programa omitiendo la depuración:
$ PYTHONBREAKPOINT=0 python3 sumando.py
Y para ejecutar el programa con el depurador de consola PuDB:
$ PYTHONBREAKPOINT=pudb.set_trace python3 sumando.py
Relacionado:
Ir al índice del tutorial de Python