我想运行pdb,逐步执行代码,并在某些时候更改某个名称指向的值。所以我可能想要更改名称'stationLat'指向的值。但似乎我做不到。这是一个例子:
>>> 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])
所以现在我在一个我想改变stationlat价值的地方。 Pdb似乎允许我将stationLat设置为一个新值,但是当我检查该值时,它没有改变:
(Pdb) stationLat
-34.171100000000003
(Pdb) stationLat = -40
(Pdb) stationLat
-34.171100000000003
(Pdb) !stationLat = -40
(Pdb) stationLat
-34.171100000000003
(Pdb)
你可以看到我尝试过使用!同样,没有成功。
pdb手册说我应该能够改变变量:
调试器无法识别的命令被假定为Python语句,并在被调试程序的上下文中执行。 Python语句也可以带有感叹号(!)作为前缀。这是检查正在调试的程序的有效方法; 甚至可以更改变量 或调用函数
这是范围问题吗?是否与我开始pdb的方式有关?我尝试了嵌入式“pdb.set_trace”习惯用法,我得到了相同的结果。
感谢阅读。
答案 0 :(得分:9)
这似乎是bug in Python 2.6。你应该能够在Python 2.7中做到这一点。
答案 1 :(得分:0)
检查此链接。它适用于我的情况。 http://mantoshkumar1.blogspot.in/2013/11/solution-to-change-local-variable-in-pdb.html
答案 2 :(得分:0)
实际上,在pdb中分配新值时,变量的值会发生变化。但是,如果您尝试在不运行代码的情况下再次读取pdb中的变量,则可能会重置为原始值。
如果您退回到代码中,您应该会看到它将使用您的新值(-40)。
试试这个:
stationLat = -40
s # step back into code
stationLat # should display -40