我相信你已经遇到过这种情况,而且我怀疑没有什么办法可以解决。 假设你运行了一些引发异常的Python代码,然后想要查看其中的错误,但在此过程中意外引发了另一个异常。如果现在尝试进行死后调试,则会看到后一个异常的回溯信息。我的问题是,前一个异常是否永远消失了?
示例:
def my_buggy_function(x):
y = x + 1
raise RuntimeError
步骤一:我遇到错误并想要调试它。
my_buggy_function(1)
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
/home/user/<ipython-input-1-430423eaff77> in <module>()
3 raise RuntimeError
4
----> 5 my_buggy_function(1)
/home/user/<ipython-input-1-430423eaff77> in my_buggy_function(x)
1 def my_buggy_function(x):
2 y = x + 1
----> 3 raise RuntimeError
4
5 my_buggy_function(1)
RuntimeError:
步骤2:我尝试调试错误,但不小心引发了另一个错误(在这种情况下,我没有加载pdb)。
pdb.pm() #Oops..
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/home/user/<ipython-input-2-619d77b83f20> in <module>()
----> 1 pdb.pm()
NameError: name 'pdb' is not defined
import pdb
步骤三:现在追溯错误信息,最后一个错误已知,而倒数第二个错误则不明确。
pdb.traceback.print_last()
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2538, in run_code
exec code_obj in self.user_global_ns, self.user_ns
File "<ipython-input-1-619d77b83f20>", line 1, in <module>
pdb.pm()
NameError: name 'pdb' is not defined
如果我想在倒数第二个 traceback 中访问 y,它是否永远丢失了?
注:我正在使用 ipython/ipdb,如果有关系的话。
sys.last_traceback
访问到最后的回溯信息--试一下并让我知道结果。由于我自己不使用IPython,所以无法完全重现你的情况。 - James Millslast_traceback
不会指向该异常吗? - thefourtheyesys.exc_tracback
(正在处理的当前回溯)--因此,sys
文档让我相信这个可能有效。 - James Mills