17

我想运行 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”习语,得到了相同的结果。

谢谢阅读。

4

2 回答 2

10

这似乎是Python 2.6 中的一个错误。您应该能够在 Python 2.7 中执行此操作。

于 2011-10-27T07:32:37.057 回答
0

实际上,当您在 pdb 中分配新值时,变量的值确实会发生变化。但是,如果您尝试在不运行代码的情况下再次读取 pdb 中的变量,它可能会重置为原始值。

如果您返回到您的代码,您应该会看到它将使用您的新值 (-40)。

尝试这个:

stationLat = -40
s # step back into code
stationLat # should display -40
于 2015-08-15T00:17:07.110 回答