Обычно более чистый дизайн - передавать значение исключению, если вы знаете, что оно понадобится вашему коду обработки исключений.Однако, если вы пишете отладчик или что-то в этом роде, где вам нужно будет обращаться к переменным, не зная заранее, какие они есть, вы можете получить доступ к произвольной переменной в контексте, в котором было сгенерировано исключение.:
def myfunction():
v1 = get_a_value()
raise Exception()
try:
myfunction()
except:
# can I access v1 from here?
v1 = inspect.trace()[-1][0].f_locals['v1']
Функциональность функции trace
и формат объектов traceback
, с которыми она имеет дело, описаны в документации модуля inspect
.