Подтвердить что ты не робот

Как изменить значение при отладке 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? Я пробовал встроенную идиому "pdb.set_trace", и я получил тот же результат.

Спасибо за чтение.

4b9b3361

Ответ 1

Это выглядит как ошибка в Python 2.6. Вы должны иметь возможность сделать это в Python 2.7.

Ответ 3

Фактически, значение переменной изменяется, когда вы назначаете новое значение в pdb. Но если вы попытаетесь снова прочитать переменную в pdb без запуска кода, она может reset установить исходное значение.

Если вы вернетесь в свой код, вы увидите, что он будет использовать ваше новое значение (-40).

Попробуйте следующее:

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