Скажем, я получаю фрейм стека с использованием sys._getframe(1)
, который, очевидно, не является текущим фреймом.Как перемещаться вверх и вниз между кадрами стека?
Теперь я хочу каким-то образом перейти к внешнему фрейму стека и выполнить оператор, например, x=10
, чтобы создать переменную в этом фрейме.
Я понимаю, что это не хорошая практика, чтобы установить переменную таким образом, но это может быть другое утверждение. Итак, важная часть состоит в том, как перейти к этой структуре. with(frame)
, похоже, не работает.
Я думаю, что это должно быть возможно, иначе почему бы существовать две функции с именем getinnerframes
и getouterframes
в модуле inspect
? Если вы не можете перейти к внешнему фрейму, почему у вас есть внутренние рамки?
Edit: В pdb
модуле, у них есть две команды вверх и вниз с docs говоря
d (собственная) Переместить текущий кадр на один уровень вниз в трассировке стека (на новый кадр).
u (p) Переместить текущий кадр на один уровень вверх в стеке След (до более старого кадра).
Помогло ли это с моим делом? Если да, то как его использовать?
Частично ответил на [Возможно ли записать в объект фрейма python, возвращаемый sys._getframe() из кода python, запущенного внутри интерпретатора?] (Http://stackoverflow.com/questions/626835/is-it -possible-to-write-to-a-python-frame-object-as-return-by-sys-getframe) – leewz