Angenommen, es gibt einen Code wie diesen:
try:
a = 1
b = 0
c = a / b
except Exception as e:
print(e)
Jetzt möchte ich den Wert jeder Variablen erhalten, bevor die Ausnahme auftritt, wenn die Ausnahme auftritt, das heißt, das Ergebnis wie a=1, b=0 erhalten.
inspect.currentframe
这个python应该是没法主动实现的, 因为如果有这样的方法, 在多层调用时, 出现了异常, 一层层记录相应的数据然后再返回, 那么这很可能会导致内存方面的问题; 而且在出现异常前, 虚拟机也不知道你会问题, 就好像你上面的除零异常, 是在运行 a/b => 1/0, 在PyIntobject的i_pmod函数代码实现中, 判断出除数为0, 直接触发异常, 然后一层层栈返回, 告诉用户出现异常, 在try_block中也并没有记录符号的值相关的代码, 所以顶多人为在except中, 做出更加精细, 人性化的输出了
使用ipython 把pdb打开,可以做到报哪一行出错!
pdb
加入代码如下:
执行如下: