¿Cómo manipulo una variable cuyo nombre entra en conflicto con los comandos PDB?

95

Mi código, para bien o para mal, está plagado de variables de una sola letra (son cosas de física, por lo que esas letras son significativas), así como el de NumPy, con el que a menudo interactúo.

Cuando se utiliza el depurador de Python, de vez en cuando voy a querer a mirar el valor de, por ejemplo, n. Sin embargo, cuando presiono n<enter>, ese es el comando PDB para (n)ext, que tiene una prioridad más alta. print nfunciona mirándolo, pero ¿cómo puedo configurarlo?

Nick T
fuente
2
Es un poco exagerado, pero ¿lo has intentado eval? eval('n = 3')? Quizás ayude :)
Paulo Bu

Respuestas:

131

Use un signo de exclamación !antes de una declaración para que se ejecute:

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)

Los doctores dicen:

! statement

Ejecute la instrucción (de una línea) en el contexto del marco de pila actual. El signo de exclamación se puede omitir a menos que la primera palabra de la declaración se parezca a un comando de depuración. [...]

Abrahán
fuente
1
En mi opinión, ¡habría sido más fácil de usar que los comandos requirieran! o algún prefijo similar.
user76284
13

Puede usar punto y coma, así que coloque algo más delante:

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

ipdb> 1; n=4
1
ipdb> print n
4
Corley Brigman
fuente
7
Una solución funcional, pero creo que '!' es el operador destinado a ocuparse de este caso.
dinosaurio
2

Esa no es la respuesta directa a su pregunta, pero puede ayudarlo: PuDB es una interfaz visual basada en consola para PDB que separa los comandos de la manipulación de variables por diseño.

Bartosz Marcinkowski
fuente
Parece interesante; Tendré que intentarlo cuando tenga tiempo para aprender
Nick T
-1

Eric IDE, Wing IDE y Spyder, por mencionar solo algunos, tienen depuradores visuales que vale la pena intentar, ya que separan la visualización de valores de los comandos.

Steve Barnes
fuente
Los depuradores visuales suelen ser muy lentos en comparación con la depuración a través de la consola, que casi no tarda en iniciar el depurador.
Curioso
1
@Curious Son más lentos para comenzar pero a menudo son más utilizables, especialmente para aquellos con experiencia limitada.
Steve Barnes
Para el trabajo científico, encuentro útil el depurador de Spyder. No creo que la depuración de una matriz de 10x10 sea práctica en la CLI
shaunakde