Выход из ipdb отладчика Python

Я использую ipdb довольно часто, чтобы просто перейти к фрагменту кода, который изоляции т. е. трудно написать реальный скрипт, который его использует. Вместо этого я пишу минимальный тестовый пример с насмешкой и прыгаю в него.

примерный для рабочего процесса:

def func():
   ...
   import ipdb
   ipdb.set_trace()
   ...

def test_case():
    ...
    func()
    ...

затем вызвать

py.test test_file.py -s -k test_case

Теперь, обычно я просто проверяю одну переменную или две, а затем хочу выйти. Измените код и сделайте это снова.

как мне уйти? В инструкции написано q завершает работу отладчика. Это не так (на самом деле). Вы должны выйти несколько раз, прежде чем отладчик фактически завершится. То же самое поведение для Ctrl-C и Ctrl-D (с дополнительным разочарованием, что нажатие Ctrl-D несколько раз в конечном итоге выходит из терминала).

есть ли умный способ заставить бросить курить? Является ли этот рабочий процесс разумным? Каков стандартный способ сделать это?

4 ответов


для меня сработало следующее:

import sys
sys.exit()

в более новых версиях ipython, как упоминалось выше и ниже, это не работает. В таком случае...--3-->

import os
os._exit(0)

все равно должен сделать трюк.


Я положил следующее в мой .pdbrc

import os

alias kk os.system('kill -9 %d' % os.getpid())

kk убивает отладчик и (процесс, который запускает отладчик).


это проблема с последней версией IPython 5.1.0. Вы можете проверить в своей среде, используя следующий код:

pip freeze | egrep -i '^i'

он будет разрешен путем понижения до IPython==5.0.0.

pip install ipython==5.0.0

это работает для меня.


Как упоминалось в другом ответе, это была ошибка в IPython 5.1. Это было зафиксировано в этот запрос тянуть и больше не является проблемой с IPython 5.2 и далее. Теперь вы можете использовать q, quit() или Ctrl+d для выхода из отладчика.