Então, eu estou executando um script Python no qual estou chamando o depurador do Python, PDB, escrevendo:
import ipdb; ipdb.set_trace()
(Versão do iPython do PDB, embora eu não ache que isso faça diferença; eu a uso apenas para a saída colorida).
Agora, quando chego ao depurador, desejo executar uma instrução de várias linhas, como uma cláusula if ou um loop for, mas assim que digito
if condition:
e pressione a tecla Enter, recebo a mensagem de erro *** SyntaxError: invalid syntax (<stdin>, line 1)
Como alguém pode executar instruções de várias linhas no PDB? Se não for possível, existe uma maneira de contornar isso ainda executando uma cláusula if ou um loop for?
interact
comando pdb ( como aprendi nesta mensagem do rastreador de erros ).!
necessário naimport
declaração?!
para evitar acidentes. Por exemplo,c = 42
no pdb continuaria a execução em vez de atribuir à variávelc
.interact
também, mas não funciona bem com o Spyder para mim.Em python3
ipdb
(epdb
) tem um comando chamado interagir . Pode ser usado para:Para usá-lo, basta digitar
interact
no prompt pdb. Entre outras coisas, é útil para aplicar código que abrange várias linhas e também para evitar o acionamento acidental de outros comandos pdb.fonte
interact
é uma sugestão muito forte. 90% é tudo que eu preciso, e é muito mais fácil digitar do quefrom IPython import embed; embed()
Minha recomendação é usar a incorporação de IPython.
fonte
import embed; embed(user_ns=locals())
.Dentro do interpretador ou depurador Python (2.7.1) (import pdb), você pode executar uma instrução de várias linhas com a seguinte sintaxe.
Nota: Quando estou dentro do intérprete, tenho que pressionar return duas vezes antes que o código seja executado. Dentro do depurador, no entanto, só preciso retornar uma vez.
fonte
Existe um caso especial se você deseja que alguns comandos sejam executados ao atingir um ponto de interrupção. Depois, há o comando debugger
commands
. Permite inserir várias linhas de comandos e finalizar toda a sequência com aend
palavra-chave. Mais com(pdb) help commands
.fonte
Não sei se você pode fazer isso, mas seria um ótimo recurso para o ipdb. Você pode usar a compreensão da lista, é claro, e executar expressões simples de várias linhas, como:
Você também pode escrever algumas funções antecipadamente para fazer o que for necessário, o que normalmente levaria várias linhas.
fonte
Escreva seu código em um editor de texto e cole-o no depurador:
É uma solução boba, mas também suja, rápida e de trabalho. Funciona no terminal Linux, mas não tenho certeza se funcionará no console do Windows.
fonte
*** SyntaxError: unexpected EOF while parsing