у меня есть модуль python с функцией:
def do_stuff(param1 = 'a'):
if type(param1) == int:
# enter python interpreter here
do_something()
else:
do_something_else()
есть ли способ перейти в интерпретатор командной строки, где у меня есть комментарий? так что если я запустил в python следующее:
>>> import my_module
>>> do_stuff(1)
я получаю следующее приглашение в контексте и в том, где у меня есть комментарий do_stuff()
?
Ответы:
Вставка
import pdb; pdb.set_trace()
войдет в отладчик Python в этот момент
См. Здесь: http://docs.python.org/library/pdb.html
источник
pdb
отличный ванильный питон; если у вас есть место для добавления внешнего пакета,ipdb
это здорово - та же функциональность, что и отладчик, но с подсветкой синтаксиса, завершением табуляции и т. д. ipythonipdb
устарело, в настоящее время я используюpdbpp
(pdb++
) , который имеет аналогичные функции и работает с нимimport pdb; pdb.set_trace()
(то есть он исправляет этот импорт, поэтому это заменяемая замена)ipdb
устарел? Я не могу найти никаких новостей об этом.ipdb
раньше, но наслаждаюсьpdbpp
с тех порЕсли вам нужна стандартная интерактивная подсказка (вместо отладчика, как показывает предварительная установка), вы можете сделать это:
import code code.interact(local=locals())
См .: модуль кода .
Если у вас установлен IPython и вместо этого вам нужна оболочка IPython, вы можете сделать это для IPython> = 0.11:
import IPython; IPython.embed()
или для более старых версий:
from IPython.Shell import IPShellEmbed ipshell = IPShellEmbed() ipshell(local_ns=locals())
источник
code.interact()
, а-ля PDBc(ontinue)
?code.interact()
это блокирующий звонок. Ваша программа остановится и дождется завершения. Если вы выйдете из интерактивного интерпретатора, ваша программа должна возобновиться с следующего оператора.help
функция переопределяется и т. Д.Если вам нужен интерпретатор Python по умолчанию, вы можете сделать
import code code.interact(local=dict(globals(), **locals()))
Это позволит получить доступ как к локальным, так и к глобальным.
Если вы хотите использовать интерпретатор IPython,
IPShellEmbed
решение устарело . В настоящее время работает:from IPython import embed embed()
источник
code.interact(local=dict(globals(), **locals()))
это намного лучше, чемcode.interact(local=locals())
потому, что последний заставляет вас повторно импортировать пакеты