Когда исключение происходит в Python, можно ли осмотреть стек? Можно ли определить его глубину? Я посмотрел на traceback модуль, но я не могу выяснить, как использовать его.
Моя цель состоит в том, чтобы поймать любые исключения, которые происходят во время парсинга выражения оценки, не ловя исключения, выданные никакими функциями, которые это, возможно, вызвало. Не ругайте меня за использование оценки. Это не было мое решение.
Примечание: Я хочу сделать это программно, не в интерактивном режиме.
Вы можете использовать модуль inspect, который имеет некоторые полезные функции для трассировки. Посмотрите обзор свойств объектов каркаса.
трассировки
достаточно - и я полагаю, что документация описывает это довольно хорошо. Упрощенный пример:
import sys
import traceback
try:
eval('a')
except NameError:
traceback.print_exc(file=sys.stdout)
В дополнение к ответу AndiDog о inspect
обратите внимание, что pdb
позволяет перемещаться вверх и вниз по стеку, проверять локальные объекты и тому подобное. Исходный код в стандартной библиотеке pdb.py
может быть полезен вам в изучении того, как делать такие вещи.