¿Cómo cambio un valor mientras depuro python con pdb?

Quiero ejecutar pdb, revisar el código y, en algún momento, cambiar el valor señalado por algún nombre. Por lo tanto, es posible que desee cambiar el valor al que apunta el nombre ‘stationLat’. Pero parece que no puedo. Aquí está el ejemplo:

>>> import extractPercentiles >>> import pdb >>> pdb.run( "extractPercentiles.extractOneStation()" ) > (1)()->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 permitirme establecer stationLat en un nuevo valor, pero cuando lo inspecciono, no se modifica:

 (Pdb) stationLat -34.171100000000003 (Pdb) stationLat = -40 (Pdb) stationLat -34.171100000000003 (Pdb) !stationLat = -40 (Pdb) stationLat -34.171100000000003 (Pdb) 

Usted puede ver que he intentado usar! También, sin éxito.

El manual de pdb dice que debería poder cambiar las variables:

Los comandos que el depurador no reconoce se asumen como instrucciones de Python y se ejecutan en el contexto del progtwig que se está depurando. Las declaraciones de Python también se pueden prefijar con un signo de exclamación (!). Esta es una forma poderosa de inspeccionar el progtwig que se está depurando; Incluso es posible cambiar una variable o llamar a una función

¿Es esta una cuestión de scope? ¿Tiene que ver con la forma en que he empezado pdb? Probé la expresión “pdb.set_trace” y obtuve el mismo resultado.

Gracias por leer.

Esto parece ser un error en Python 2.6 . Deberías poder hacer esto en Python 2.7.

En realidad, el valor de la variable se cambia cuando asigna un nuevo valor en pdb. Pero si intenta volver a leer la variable en pdb sin ejecutar su código, puede restablecerse al valor original.

Si vuelve a ingresar a su código, debería ver que usará su nuevo valor (-40).

Prueba esto:

 stationLat = -40 s # step back into code stationLat # should display -40