Quiero ejecutar pdb, recorrer el código y, en algún momento, cambiar el valor señalado por algún nombre. Así que podría querer cambiar el valor apuntado por el nombre 'stationLat'. Pero parece que no puedo. Aquí está el ejemplo:¿Cómo cambio un valor mientras depuro python con pdb?
>>> import extractPercentiles
>>> import pdb
>>> pdb.run("extractPercentiles.extractOneStation()")
> <string>(1)<module>()->None
(Pdb) s
--Call--
> /scratch/extractPercentiles.py(96)extractOneStation()
-> def extractOneStation() :
(Pdb) tbreak 132
Breakpoint 3 at /scratch/extractPercentiles.py:132
(Pdb) c
Deleted breakpoint 3
> /scratch/extractPercentiles.py(132)extractOneStation()
-> stationLon = float(stationLoc[3])
Así que ahora estoy en un lugar donde me gustaría cambiar el valor de stationlat. Pdb parece permitir que fije stationLat a un nuevo valor, pero cuando examino el valor, es el mismo:
(Pdb) stationLat
-34.171100000000003
(Pdb) stationLat = -40
(Pdb) stationLat
-34.171100000000003
(Pdb) !stationLat = -40
(Pdb) stationLat
-34.171100000000003
(Pdb)
Se puede ver He intentado utilizar! también, sin éxito.
El manual AP dice que debería ser capaz de cambiar las variables:
Los comandos que el depurador no reconoce se supone que son las sentencias de Python y se ejecutan en el contexto del programa que se está depurando. Los enunciados de Python también pueden estar precedidos por un signo de exclamación (!). Esta es una forma poderosa de inspeccionar el programa que se está depurando; incluso es posible cambiar una variable o llamar a una función
¿Se trata de una cuestión de alcance? ¿Tiene que ver con la forma en que he comenzado pdb? Probé la expresión incrustada "pdb.set_trace" y obtuve el mismo resultado.
Gracias por leer.
Ah! Vale gracias. Pensé que tal vez tenía que exigir nombres o usar algún espacio de nombres especial. Intenté subir y bajar la pila de cuadros también. –
Oh, voy a grabar que para este proyecto me veo obligado a trabajar en python 2.5.2, que todavía tiene el error. –
también, hay ciertas variables que no puede asignar. como "a" o "b" – dtc