2011-10-27 11 views
12

Voglio eseguire pdb, eseguire il codice e, a un certo punto, modificare il valore indicato da un nome. Quindi potrei voler cambiare il valore indicato dal nome 'stationLat'. Ma sembra che non ci riesca. Ecco l'esempio:Come cambio un valore mentre eseguo il debug di 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]) 

Così ora sono in un posto dove mi piacerebbe cambiare il valore di stationlat. PDB sembra mi permetterà di impostare stationLat a un nuovo valore, ma quando ho ispezionare il valore, è invariato:

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

potete vedere ho provato ad utilizzare! pure, senza successo.

Il manuale PPB dice che dovrei essere in grado di modificare le variabili:

Comandi che il debugger non riconosce si presume siano istruzioni Python e vengono eseguiti nel contesto del programma in fase di debug. Le istruzioni Python possono anche essere precedute da un punto esclamativo (!). Questo è un modo efficace per ispezionare il programma in fase di debug; è anche possibile modificare una variabile o chiamare una funzione

È una questione di ambito? Ha a che fare con il modo in cui ho avviato pdb? Ho provato l'idioma "pdb.set_trace" incorporato e ho ottenuto lo stesso risultato.

Grazie per la lettura.

risposta

9

Questo sembra essere un bug in Python 2.6. Dovresti riuscire a farlo in Python 2.7.

+0

Ah! Ok grazie. Ho pensato che forse dovevo demarcare i nomi o usare qualche spazio dei nomi speciale. Avevo provato anche a salire e scendere il frame stack. –

+1

Oh, registrerò che per questo progetto sono costretto a lavorare di nuovo in python 2.5.2, che ha ancora il bug. –

+0

Inoltre, ci sono alcune variabili che non puoi assegnare. come "a" o "b" – dtc

0

In realtà, il valore della variabile viene modificato quando si assegna un nuovo valore in pdb. Ma se provi a leggere di nuovo la variabile in pdb senza eseguire il tuo codice, potrebbe ripristinare il valore originale.

Se si ritorna al codice, si dovrebbe vedere che utilizzerà il nuovo valore (-40).

Prova questa:

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