versiones guia español descargar actualizar python generator ipdb

python - guia - Convertir el objeto del generador en una lista para la depuración



qgis manual (1)

Simplemente llame a la list en el generador.

lst = list(gen) lst

Tenga en cuenta que esto afecta al generador que no devolverá ningún elemento adicional.

Tampoco puede llamar directamente a la list en IPython, ya que entra en conflicto con un comando para enumerar líneas de código.

Probado en este archivo:

def gen(): yield 1 yield 2 yield 3 yield 4 yield 5 import ipdb ipdb.set_trace() g1 = gen() text = "aha" + "bebe" mylst = range(10, 20)

que cuando se ejecuta:

$ python code.py > /home/javl/sandbox/so/debug/code.py(10)<module>() 9 ---> 10 g1 = gen() 11 ipdb> n > /home/javl/sandbox/so/debug/code.py(12)<module>() 11 ---> 12 text = "aha" + "bebe" 13 ipdb> lst = list(g1) ipdb> lst [1, 2, 3, 4, 5] ipdb> q Exiting Debugger.

Método general para escapar conflictos de nombre de función / variable / depurador

Hay comandos de depuración p y pp que print y print cualquier expresión que los siga.

Entonces podrías usarlo de la siguiente manera:

$ python code.py > /home/javl/sandbox/so/debug/code.py(10)<module>() 9 ---> 10 g1 = gen() 11 ipdb> n > /home/javl/sandbox/so/debug/code.py(12)<module>() 11 ---> 12 text = "aha" + "bebe" 13 ipdb> p list(g1) [1, 2, 3, 4, 5] ipdb> c

También hay un comando exec , llamado al ponerle un prefijo a tu expresión ! , lo que obliga al depurador a tomar su expresión como Python.

ipdb> !list(g1) []

Para obtener más detalles, consulte help p , help pp y help exec when depurador.

ipdb> help exec (!) statement Execute the (one-line) statement in the context of the current stack frame. The exclamation point can be omitted unless the first word of the statement resembles a debugger command. To assign to a global variable you must always prefix the command with a ''global'' command, e.g.: (Pdb) global list_options; list_options = [''-l'']

Esta pregunta ya tiene una respuesta aquí:

Cuando estoy depurando en Python usando IPython, a veces llego a un punto de quiebre y quiero examinar una variable que actualmente es un generador. La forma más simple que puedo pensar de hacer esto es convirtiéndolo en una lista, pero no tengo claro cuál es una forma fácil de hacer esto en una línea en ipdb , ya que soy muy nuevo en Python.