VS Code Python debugger — значения параметров при возврате

#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.
 

Перемещение последней точки останова устраняет проблему. Это повторяется — если я возвращаю точку останова, возникает ошибка.

Я хотел бы знать, почему это произошло, поэтому я пока оставляю вопрос нерешенным.