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.
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. –
Oh, registrerò che per questo progetto sono costretto a lavorare di nuovo in python 2.5.2, che ha ancora il bug. –
Inoltre, ci sono alcune variabili che non puoi assegnare. come "a" o "b" – dtc