Как вы пропустите понимание списка в отладчике Python (pdb)?

В pdb инструкция next не выполняет переходы по спискам, а выполняет каждую итерацию. Есть ли способ перешагнуть через них, поэтому отладка будет продолжена на следующей строке после понимания списка?

Мне пришлось прибегнуть к перечислению кода, установлению точки останова на следующей строке, а затем продолжению выполнения следующей контрольной точки. Это раздражает, и я решил, что должен быть лучший способ.

Ответ 1

Вы можете использовать команду until. Вывод help until в pdb:

ЕНТ (П)
Продолжайте выполнение до тех пор, пока строка с номером больше текущего один достигнут или пока текущий кадр не вернет

Ответ 2

Разрабатывая ответ Sven, как мне пришлось недавно описывать until и next коллеге. Это не относится к пониманию списка stuck со следующими, но для циклов вообще.:

Команда until похожа на next, за исключением того, что она явно продолжается до тех пор, пока выполнение не достигнет строки в той же функции с номером строки, превышающим текущее значение.

Это означает, что вы можете переходить через циклы с помощью until

Просто для покрытия step и next для полноты:

Команда step используется для выполнения текущей строки, а затем останавливается в следующей точке выполнения

Это означает, что он будет следовать инструкциям. Примечание: конкатенация инструкций с помощью ; будет обрабатываться как одна инструкция.

var A=0; var B=0 #Note: that will count as one instruction

Команда next подобна шагу, но не вводит функции, вызванные из выполняемого оператора. По сути, он выполняет весь путь через вызов функции для следующего оператора в текущей функции за одну операцию.

next помогает перепрыгнуть через несколько инструкций, в функции нескольких определений переменных он перепрыгнет через все из них.

Вот пример, демонстрирующий сценарий:

Пример: pdb_until.py

aVar = 3
x = [i for i in range(0,30)]
bVar = 5

Выполнение этого с помощью Pdb:

python -m pdb pdb_until.py

Запуск нашего интерактивного сеанса:

> pdb_until.py(1)<module>()
-> aVar = 3
(Pdb) step                #our Input, we step
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, next
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, we are now stuck on line 2
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) until               #our Input, until steps over (runs list comp)

Источник: стандартная библиотека Python, например, Дуг Хеллманн