Итак, я запускаю скрипт Python, внутри которого я вызываю отладчик Python, PDB:
import ipdb; ipdb.set_trace()
(Версия PDB от iPython, хотя я не думаю, что это имеет значение; я использую ее только для цветного вывода).
Теперь, когда я попадаю в отладчик, я хочу выполнить многострочный оператор, такой как условие if или цикл for, но как только я наберу
if condition:
и нажмите клавишу возврата, я получаю сообщение об ошибке *** SyntaxError: invalid syntax (<stdin>, line 1)
Как выполнить многострочные операторы в PDB? Если это невозможно, есть ли способ избежать выполнения предложения if или цикла for?
interact
( как я узнал из этого сообщения об ошибке ).!
нужно вimport
заявлении?!
, чтобы избежать несчастных случаев. Например,c = 42
в pdb будет продолжаться выполнение вместо присвоения переменнойc
.interact
тоже правильный путь для выхода , но он не очень подходит для Spyder для меня.В python3
ipdb
(иpdb
) есть команда под названием взаимодействовать . Может использоваться для:Чтобы использовать его, просто введите
interact
в приглашении pdb. Помимо прочего, это полезно для применения кода, занимающего несколько строк, а также для предотвращения случайного запуска других команд pdb.источник
interact
- слишком сильное предложение. 90% - это все, что мне когда-либо нужно, и это гораздо легче набрать, чемfrom IPython import embed; embed()
Я рекомендую использовать встраивание IPython.
источник
import embed; embed(user_ns=locals())
.Внутри интерпретатора или отладчика Python (2.7.1) (import pdb) вы можете выполнить многострочный оператор со следующим синтаксисом.
Примечание: когда я нахожусь внутри интерпретатора, мне нужно дважды нажать return, прежде чем код будет выполнен. Внутри отладчика, однако, мне нужно нажать «возврат» только один раз.
источник
Существует особый случай, если вы хотите, чтобы пара команд выполнялась при достижении точки останова. Тогда есть команда отладчика
commands
. Это позволяет вводить несколько строк команд, а затем завершать всю последовательностьend
ключевым словом. Больше с(pdb) help commands
.источник
Я не знаю, сможете ли вы сделать это, но это была бы отличная возможность для ipdb. Конечно, вы можете использовать списочные выражения и выполнять простые многострочные выражения, такие как:
Вы также можете написать некоторые функции заранее, чтобы сделать все, что вам нужно, что обычно занимает несколько строк.
источник