Como posso manipular uma variável cujo nome está em conflito com os comandos PDB?


99

Meu código está, para o bem ou para o mal, repleto de variáveis ​​de uma única letra (é coisa de física, então essas letras são significativas), bem como do NumPy, com o qual estou interagindo com frequência.

Ao usar o depurador Python, ocasionalmente vou querer olhar para o valor de, digamos n,. No entanto, quando eu acerto n<enter>, esse é o comando PDB para (n)ext, que tem uma prioridade mais alta. print nfunciona em torno de olhar para ele, mas como posso configurá-lo?


2
Meio exagero, mas você já tentou eval? eval('n = 3')? Talvez ajude :)
Paulo Bu

Respostas:


136

Use um ponto de exclamação !antes de uma instrução para que seja executada:

python -m pdb test.py
> /home/user/test.py(1)<module>()
-> print('foo')
(Pdb) !n = 77
(Pdb) !n
77
(Pdb) n
foo
> /home/user/test.py(2)<module>()
-> print('bar')
(Pdb)

Os documentos dizem:

! statement

Execute a instrução (de uma linha) no contexto do quadro de pilha atual. O ponto de exclamação pode ser omitido, a menos que a primeira palavra da instrução seja semelhante a um comando do depurador. [...]


2
OMI, teria sido mais amigável para os comandos exigirem! ou algum prefixo.
user76284

13

Você pode usar ponto-e-vírgula, então basta colocar outra coisa antes dele:

ipdb> print n
2
ipdb> n
> 145 <some code here>
  146
  147

ipdb> 1; n=4
1
ipdb> print n
4

7
Uma solução alternativa funcional, mas acredito que '!' é a operadora destinada a lidar com este caso.
dinossauro

2

Essa não é a resposta direta à sua pergunta, mas pode ajudá-lo: PuDB é uma interface visual baseada em console para PDB que separa os comandos da manipulação de variáveis ​​por design.


Parece interessante; Terei que tentar quando tiver tempo para aprender
Nick T

0

Eric IDE, Wing IDE e Spyder, para mencionar apenas alguns, possuem depuradores visuais que valem a pena, pois separam a exibição de valores dos comandos.


os depuradores visuais geralmente são muito lentos em comparação com a depuração por meio do console, que quase não leva tempo para iniciar o depurador.
Curioso

1
@Curious Eles são mais lentos para começar, mas geralmente são mais úteis, especialmente para aqueles com experiência limitada.
Steve Barnes

Para trabalhos científicos, acho o depurador do Spyder muito útil. Não acho que depurar uma matriz 10x10 seja prático na CLI
shaunakde
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.