Преобразование объекта генератора в список для отладки

Когда я отлаживаю Python с помощью IPython, я иногда ударяю точку прерывания, и я хочу изучить переменную, которая в настоящее время является генератором. Самый простой способ сделать это – преобразовать его в список, но я не понимаю, что это простой способ сделать это в одной строке в ipdb , так как я так новичок в Python.

  • Как выйти из ipdb во время посмертной отладки?
  • Можно ли удалить набор точек останова с помощью ipdb.set_trace ()?
  • Возможная ошибка в модуле pdb в Python 3 при использовании генераторов списков
  • Использование ipdb с gud emacs без явных контрольных точек в коде
  • Процесс многопроцессорности python уничтожается HTTP-запросом, если импортирован ipdb
  • ipython отладчик: полная трассировка на интерактивном pdb?
  • Выход из Python Debugger ipdb
  • ipython ipdb, при вызове через ipdb.set_trace () не запоминает историю команд во время отладки
  • One Solution collect form web for “Преобразование объекта генератора в список для отладки”

    Просто list на генераторе.

     lst = list(gen) lst 

    Имейте в виду, что это влияет на генератор, который не будет возвращать какие-либо дополнительные элементы.

    Вы также не можете напрямую вызывать list в IPython, так как он конфликтует с командой для перечисления строк кода.

    Протестировано в этом файле:

     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) 

    который при запуске:

     $ 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. 

    Общий метод экранирования имени функции / переменной / отладчика

    Существуют команды prettyprint p и pp которые будут print и prettyprint любые последующие выражения.

    Поэтому вы можете использовать его следующим образом:

     $ 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 

    Существует также команда exec , вызываемая префиксом вашего выражения ! , который заставляет отладчик принимать ваше выражение как Python one.

     ipdb> !list(g1) [] 

    Для получения дополнительной информации см. help p , help pp и help exec когда в отладчике.

     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, eg: (Pdb) global list_options; list_options = ['-l'] 
    Python - лучший язык программирования в мире.