Как выполнять многострочные операторы в собственном отладчике Python (PDB)
Итак, я запускаю Python script, в котором я вызываю отладчик Python, PDB, написав:
import ipdb; ipdb.set_trace()
(версия iPython PDB, хотя для этого я не думаю, что это имеет значение, я использую ее только для цветного вывода).
Теперь, когда я добираюсь до отладчика, я хочу выполнить многострочный оператор, такой как предложение if или цикл for, но как только я набираю
if condition:
и нажмите клавишу возврата, я получаю сообщение об ошибке *** SyntaxError: invalid syntax (<stdin>, line 1)
Как выполнить многострочные операторы в PDB? Если это невозможно, есть ли способ обойти это, выполняя условие if или цикл for?
Ответы
Ответ 1
Вы можете сделать это, находясь в pdb, чтобы запустить временный интерактивный сеанс Python со всеми доступными локальными переменными:
(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
Когда вы закончите, используйте Ctrl-D, чтобы вернуться в обычное приглашение pdb.
Просто не ударяйте Ctrl-C, который завершит весь сеанс pdb.
Ответ 2
Внутри интерпретатора или отладчика Python (2.7.1) (import pdb) вы можете выполнить многострочный оператор со следующим синтаксисом.
for i in range(5): print("Hello"); print("World"); print(i)
Примечание. Когда я нахожусь внутри интерпретатора, я должен дважды нажать клавишу возврата, прежде чем код будет выполнен. Внутри отладчика, однако, мне нужно только один раз нажать кнопку возврата.
Ответ 3
У PDB есть команда под названием interact. Его можно использовать для:
Запустите интерактивный интерпретатор (используя модуль code), глобальное пространство имен которого содержит все (глобальные и локальные) имена, найденные в текущем сфера.
Чтобы использовать его, просто введите interact
в командной строке pdb. Среди прочего, это полезно для применения кода, охватывающего несколько строк, а также для предотвращения случайного запуска других команд pdb.
Ответ 4
Существует специальный случай, если вы хотите выполнить пару команд при достижении точки останова. Тогда есть команда отладчика commands
. Он позволяет вводить несколько строк команд, а затем завершать всю последовательность с помощью ключевого слова end
. Больше с (pdb) help commands
.
Ответ 5
Я не знаю, можете ли вы это сделать, это будет отличная функция для ipdb. Разумеется, вы можете использовать понимание списков и выполнять простые многострочные выражения, например:
if y == 3: print y; print y; print y;
Вы также можете заранее написать некоторые функции, чтобы сделать все, что вам нужно, что обычно принимает несколько строк.