В Python, как я могу напечатать текущий стек вызовов из метода (для целей отладки).
276
В Python, как я могу напечатать текущий стек вызовов из метода (для целей отладки).
Вот пример получения стека через модуль traceback и его печати:
import traceback
def f():
g()
def g():
for line in traceback.format_stack():
print(line.strip())
f()
# Prints:
# File "so-stack.py", line 10, in <module>
# f()
# File "so-stack.py", line 4, in f
# g()
# File "so-stack.py", line 7, in g
# for line in traceback.format_stack():
Если вы действительно хотите распечатать стек в stderr, вы можете использовать:
traceback.print_stack()
Или для печати в стандартный вывод (полезно, если вы хотите сохранить перенаправленный вывод вместе), используйте:
traceback.print_stack(file=sys.stdout)
Но получение этого traceback.format_stack()
позволяет делать с ним все, что угодно.
sys._current_frames()
. Например, py_better_exchookdump_all_thread_tracebacks
делает это (отказ от ответственности: я это написал).источник
traceback.print_exc()
что дает вам почти то же самое, что вы получили бы безexcept
утверждения (и также менее кодирующе, чем принятый ответ).traceback.print_exc()
печатает трассировку стека для любого исключения, которое вы, возможно, обрабатываете - но это не решает первоначальный вопрос, а именно, как напечатать текущий стек («где вы сейчас находитесь», а не «где был ваш код, когда было последнее исключение»). выкл, если есть ".)inspect.stack()
возвращает текущий стек, а не трассировку исключения:См. Https://gist.github.com/FredLoney/5454553 для служебной функции log_stack.
источник
Если вы используете отладчик Python, не только интерактивное исследование переменных, но вы можете получить стек вызовов с помощью команды «где» или «w».
Так что в верхней части вашей программы
Затем в коде, где вы хотите увидеть, что происходит
и вы попадете в подсказку
источник
where
?(pdb)
просто наберите,where
и он выведет трассировку стека на терминал.breakpoint()
которая устраняет необходимость импорта pdb.для тех, кому нужно распечатать стек вызовов при использовании pdb, просто сделайте
источник
Вот вариант отличного ответа @ RichieHindle, в котором реализован декоратор, который можно выборочно применять к функциям по желанию. Работает с Python 2.7.14 и 3.6.4.
Выход из образца:
источник
Установите Inspect-it
Код
Вы можете сделать фрагмент этой строки
он покажет вам список стека вызовов функций с именем файла и номером строки
список от начала, где вы положили эту строку
источник