Справочная информация
Я отлаживал свои скрипты на Python ~ 2 года с простым from IPython import embed; embed()
, и он работал очень хорошо.Я просто помещаю команду в строку, которую я хочу исследовать, и при запуске сценария у меня будет полная оболочка IPython с возможностью изучения переменных, определения функций и т. Д. Кроме того, оболочка IPython поставляется с дополнением табуляции имени переменной.
Теперь, вместо того, чтобы всегда определять «линию паузы» с помощью from IPython import embed; embed()
, я бы хотел, чтобы мои скрипты Python приостанавливали выполнение во время выполнения тестов, когда они встречают исключение.
Вопрос
Как вы запускаете pytest
таким образом, что
- Когда выдается исключение , он запускает отладчик python
- Этот отладчик имеет завершение табуляции для имен переменных?
Настройка
Простой не пройденный тест
# test_somemodule.py
def test_me(some_variable):
x = 1 + some_variable
return x
test_me('I am a string')
(Нет, вы не пишете тесты для pytest, как этот, но для этой примерной цели это просто отлично.)
Решения, которыене работают
1.pytest --pdb
(без установленного pdbpp
)
Открывается базовая оболочка pdb
, когда она запускается с ошибкой.Но у него нет табуляции.
-> x = 1 + some_variable
(Pdb) so[<tab_here_produces_tab>]
2.pytest --pdb
( с установленным pdbpp
)
Открывается базовая оболочка pdbpp
, когда она запускается с ошибкой.Но нет табуляции.
-> x = 1 + some_variable
(Pdb++) so[<tab_here_produces_tab>]
3.pytest --pdb --pdbcls=IPython.terminal.debugger:Pdb
Открывается базовая оболочка ipdb
, когда она запускается с ошибкой.Но нет завершения табуляции.
103
104 def test_me(some_variable):
--> 105 x = 1 + some_variable
106 return x
107
ipdb> so[<tab_here_produces_tab>]
4.fancycompleter.interact()
Попробовал fancycompleter.interact()
как предложено здесь , не повезло (с pdb
, ipdb
и pdbpp
, fancycompleter v.0.8
и даже этой исправленной версией.).
5.pytest --pdb -s
Как прокомментировал Сергей Воронежский , для pytest
доступен флаг -s
.Тем не менее, завершение вкладки работает только частично: если есть несколько опций для одного и того же начального символа (символов), он выведет список возможных переменных.В нем отсутствует возможность быстрого выбора одной из совпадающих переменных (которая доступна, например, в оболочке IPython):
Есть ли способсделать завершение работы с вкладкой имени переменной?Я бы предпочел ipdb
или pdbpp
вместо ванили pdb
, но даже рабочее решение с pdb
просто отлично.