python pdb - цикл пропуску


88

Як я можу пропустити цикл за допомогою pdb.set_trace()?

Наприклад,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdbзапити перед циклом. Вводжу команду. Повертаються всі значення 1-5, а потім я б хотів, щоб перед виконанням було запропоновано pdbще раз print('Done!').

Відповіді:


137

Спробуйте untilтвердження.

Перейдіть до останнього рядка циклу (за допомогою nextабо n), а потім використовуйте untilабо unt. Це переведе вас до наступного рядка, відразу після циклу.

http://www.doughellmann.com/PyMOTW/pdb/ має гарне пояснення


Зі статті: перейдіть до останнього рядка циклу for за допомогою n, а потім введіть until. Це триватиме доти, доки не буде перевищено принаймні поточний рядок.
sachinruk,

Працює і з розумінням списків. Вам не потрібно дбати про останній рядок.
Шива,

Що ви зробите, якщо перехід до останнього рядка циклу буде громіздким? Невже немає еквівалента функції fR, debugяка "завершує виконання поточного циклу або функції" ( adv-r.hadley.nz/debugging.html )?
Касвед,

Використання until(або його короткої форми unt) без аргументів завжди буде йти по рядку (якщо ви не натиснете оператор return), тому ви можете просто використовувати це купу разів замість n.
Борис

Це не працює з breakpoint()набором у циклі в python 3. Банки VB Editorможуть приймати точки зупинки "на льоту", але це, швидше за все, не так pdb.
Тимо

4

Ви повинні встановити точку зупинки після циклу ("break main.py:4", припускаючи, що наведені вище рядки знаходяться у файлі, який називається main.py), а потім продовжити ("c").


2

У посиланні, згаданому прийнятою відповіддю ( https://pymotw.com/3/pdb/ ), я знайшов цей розділ дещо кориснішим:

Щоб дозволити виконанню до певного рядка, передайте номер рядка команді till.

Ось приклад того, як це може працювати re: loops:

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення

Це позбавляє вас від двох речей: необхідності створювати додаткові точки зупинки та необхідності переходити до кінця циклу (особливо коли ви, можливо, вже повторили таке, що не змогли б без повторного запуску налагоджувача).

Ось документи на Python until. До речі, я використовую pdb++як випадаючий стандартний налагоджувач (отже, форматування), але untilпрацює однаково в обох.


0

Ви можете встановити іншу точку зупинки після циклу і перейти до неї (при налагодженні) за допомогою c:

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')

-17

Якби я це правильно зрозумів.

Одним із можливих способів зробити це буде:

Як тільки ви отримаєте pdbпідказку. Просто вдаривn (далі) 10 разів, щоб вийти з циклу.

Однак я не знаю способу виходу з циклу pdb .

rОднак ви можете використати для виходу з функції.


5
А що, якщо цикл дорівнює 10000000? Ваша відповідь дуже очевидна.
hecvd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.