Получение стека фрейма - PullRequest
       15

Получение стека фрейма

6 голосов
/ 30 марта 2012

Как получить кадр стека для передачи в traceback.print_stack?

С Python 3.3a1 документы :

traceback.print_stack(f=None, limit=None, file=None)

эта функция печатает трассировку стека из своей точки вызова Необязательный f Аргумент может использоваться для указания альтернативного стека фрейма для запуска. необязательный аргумент limit и file имеет то же значение, что и для print_exception().

Но нигде в документации я не нашел способа получить кадр стека. Если быть точным, скажем, я хочу напечатать трассировку стека, начиная на один уровень выше точки вызова. Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 30 марта 2012

inspect.stack() вернет вам текущий стек в виде списка. Вы можете выбрать любой кадр, который хотите из него. Вы также можете сделать, например, inspect.currentframe().f_back, чтобы получить кадр вашего звонящего. По сути, модуль inspect находится там, где он находится.

2 голосов
/ 30 марта 2012

Эта документация содержит информацию о функциях, которые можно использовать для получения стекового фрейма, например, inspect.currentframe().

1 голос
/ 30 марта 2012

В дополнение к проверке модуля вы можете попробовать:

import sys
sys._getframe(1)

или

import sys
sys._getframe().f_back

Имейте в виду, что это частная функция, некоторые версии python могут ее не реализовывать.

...