Come si manipola una variabile il cui nome è in conflitto con i comandi PDB?


95

Il mio codice è, nel bene o nel male, pieno di variabili di una singola lettera (è roba fisica, quindi quelle lettere sono significative), così come NumPy, con cui interagisco spesso.

Quando si utilizza il debugger Python, di tanto in tanto io voglio guardare il valore di, diciamo, n. Tuttavia, quando premo n<enter>, quello è il comando PDB per (n)ext, che ha una priorità più alta. print nfunziona guardandolo, ma come posso impostarlo?


2
Un po 'eccessivo ma ci hai provato eval? eval('n = 3')? Forse aiuta :)
Paulo Bu

Risposte:


131

Usa un punto esclamativo !prima di un'istruzione per eseguirla:

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)

I documenti dicono:

! statement

Eseguire l' istruzione (una riga) nel contesto dello stack frame corrente. Il punto esclamativo può essere omesso a meno che la prima parola dell'istruzione non assomigli a un comando del debugger. [...]


1
IMO sarebbe stato più facile da usare per i comandi da richiedere! o qualche prefisso simile.
user76284

13

Puoi usare il punto e virgola, quindi mettici qualcos'altro davanti:

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

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

7
Una soluzione alternativa funzionale, ma credo che "!" è l'operatore che intende occuparsi di questo caso.
dinosauro

2

Questa non è la risposta diretta alla tua domanda, ma può aiutarti: PuDB è un'interfaccia visiva basata su console per PDB che separa i comandi dalla manipolazione delle variabili in base alla progettazione.


Sembra interessante; Dovrò provarci quando avrò tempo per imparare
Nick T

-1

Eric IDE, Wing IDE e Spyder per citarne solo alcuni hanno tutti debugger visivi che vale la pena provare poiché separano la visualizzazione dei valori dai comandi.


i debugger visivi sono generalmente molto lenti rispetto al debug tramite console, che non richiede quasi tempo per avviare il debugger.
Curioso

1
@Curioso Sono più lenti da avviare ma spesso sono più utilizzabili soprattutto per chi ha poca esperienza.
Steve Barnes

Per il lavoro scientifico trovo utile il debugger di Spyder. Non credo che il debug di una matrice 10x10 sia pratico sulla CLI
shaunakde
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.