#python #vscode-debugger
#python #vscode-отладчик
Вопрос:
Я использую VS code Python debugger для отслеживания возвратов функций.
Python: 3.7.3
VS Code: 1.51.0
Python Extension: v2020.11.371526539
MACOS: 10.15.7 (19H2)
Я могу проверить переменные перед их возвратом, и они верны, но после возврата они принимают ранее сохраненные значения — как будто они никогда не перезаписывались оператором return.
def align_bb(self, bbs2)
...
# the variables are correct at this point
return update_obj, new_obj, stale_obj
#but they change by the time they come back from the function
update_obj, new_obj, stale_obj = trk.align_bb(bbs2)
Значения параметров внутри функции
update_obj, new_obj, stale_obj
([], [[...], [...], [...]], [0])
special variables
function variables
0:[]
1:[[10, 20, 80, 100], [80, 110, 90, 110], [80, 100, 10, 40]]
2:[0]
len():3
Значения параметров после оператора return:
update_obj, new_obj, stale_obj
([], [[...]], [])
special variables
function variables
0:[]
1:[[35, 65, 35, 65]]
2:[]
len():3
Если я запускаю код вне отладчика, возвращаемые значения остаются неизменными. Я перезапустил VS code и свой компьютер. Я также вернул расширение python и удалил его, но каждый раз получаю одни и те же странные значения. Я определенно смотрю на значения после возврата функции, а не раньше.
Комментарии:
1. Ваш код делает что-то не так, или это просто проблема с отображением отладчика?
2. похоже, это ограничено отладчиком. Если я запускаю
python tracker.py
, результаты верны. Я также получал эти значения в консоли отладки
Ответ №1:
У меня была точка останова в строке возврата в функции и точка останова при вызове / назначении функции после возврата.
def align_bb(self, bbs2)
...
# the variables are correct at this point
return update_obj, new_obj, stale_obj # I had a breakpoint here
update_obj, new_obj, stale_obj = trk.align_bb(bbs2) # and a breakpoint here
assert update_obj == []
#moving the breakpoint to the next line of execution fixed the issue.
Перемещение последней точки останова устраняет проблему. Это повторяется — если я возвращаю точку останова, возникает ошибка.
Я хотел бы знать, почему это произошло, поэтому я пока оставляю вопрос нерешенным.