eu tenho um módulo python com uma função:
def do_stuff(param1 = 'a'):
if type(param1) == int:
# enter python interpreter here
do_something()
else:
do_something_else()
existe uma maneira de cair no interpretador de linha de comando onde tenho o comentário? para que se eu executar o seguinte em python:
>>> import my_module
>>> do_stuff(1)
recebo meu próximo prompt no escopo e contexto de onde tenho o comentário do_stuff()
?
Respostas:
Inserindo
irá entrar no depurador python nesse ponto
Veja aqui: http://docs.python.org/library/pdb.html
fonte
pdb
é um grande python baunilha; se você tem espaço para trazer um pacote externo,ipdb
é ótimo - a mesma funcionalidade do depurador, mas com o realce de sintaxe, preenchimento de tab, etc. de ipythonipdb
foi descontinuado, hoje em dia eu usopdbpp
(pdb++
) , que tem recursos semelhantes, e funciona comimport pdb; pdb.set_trace()
(ou seja, corrige essa importação, então é uma substituiçãoipdb
foi descontinuado? Não consigo encontrar nenhuma notícia disso.ipdb
antes, mas tenho gostadopdbpp
desdeSe quiser um prompt interativo padrão (em vez do depurador, conforme mostrado por prestomation), você pode fazer o seguinte:
Veja: o módulo de código .
Se você tiver o IPython instalado e quiser um shell IPython, pode fazer isso para IPython> = 0,11:
ou para versões mais antigas:
fonte
code.interact()
, a la PDBc(ontinue)
?code.interact()
é uma chamada de bloqueio. Seu programa irá parar e aguardar que termine. Se você sair do interpretador interativo, seu programa deve continuar com a instrução imediatamente seguinte.help
função integrada é substituída, etc.Se você quiser um interpretador Python padrão, você pode fazer
Isso permitirá o acesso a locais e globais.
Se você quiser usar um interpretador IPython, a
IPShellEmbed
solução está desatualizada . Atualmente, o que funciona é:fonte
code.interact(local=dict(globals(), **locals()))
é muito melhor do quecode.interact(local=locals())
porque o último faz você reimportar pacotes