Как изменить значение при отладке python с pdb?
Я хочу запустить 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.set_trace" идиома, и я получил тот же результат.
Спасибо за чтение.
3 ответов
Это ошибка в Python 2.6. Вы должны быть в состоянии сделать это в Python 2.7.
регистрация по этой ссылке. В моем случае это сработало. http://mantoshkumar1.blogspot.in/2013/11/solution-to-change-local-variable-in-pdb.html
на самом деле значение переменной изменяется при назначении нового значения в pdb. Но если вы попытаетесь снова прочитать переменную в pdb без запуска кода, она может сбросить исходное значение.
Если вы вернетесь в свой код, вы увидите, что он будет использовать ваше новое значение (-40).
попробуйте это:
stationLat = -40
s # step back into code
stationLat # should display -40