Для python есть способ распечатать область переменных из контекста, где происходит исключение?
Есть ли способ распечатать область переменных из контекста, где происходит исключение?
Например:
def f():
a = 1
b = 2
1/0
try:
f()
except:
pass # here I want to print something like "{'a': 1, 'b': 2}"
Ответ 1
Вы можете использовать функцию sys.exc_info(), чтобы получить последнее исключение, которое произошло в текущем потоке в вас, кроме предложения. Это будет кортеж типа исключения, экземпляр исключения и трассировка. Трассировка - это связанный список фреймов. Это то, что используется для печати backtrace интерпретатором. Он содержит локальный словарь.
Итак, вы можете сделать:
import sys
def f():
a = 1
b = 2
1/0
try:
f()
except:
exc_type, exc_value, tb = sys.exc_info()
if tb is not None:
prev = tb
curr = tb.tb_next
while curr is not None:
prev = curr
curr = curr.tb_next
print prev.tb_frame.f_locals
Ответ 2
Вы должны сначала извлечь трассировку, в вашем примере что-то вроде этого напечатает ее: