我确信你发现自己处于这种状况,我怀疑没有办法解决这个问题。 假设您运行了一些引发异常的python代码,那么您希望调查它,但在执行此操作时会意外地引发另一个异常。如果您现在尝试事后调试,您将看到后一个异常的回溯。我的问题是,前者永远失去了吗?
示例:
def my_buggy_function(x):
y = x + 1
raise RuntimeError
第1步:我提出错误,我想调试它
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
步骤3:现在回溯给了我最后一个错误,倒数第二个错误。
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
如果我想在倒数第二次回溯中访问y,它会永远丢失吗?
注意:我正在使用ipython / ipdb以防万一
答案 0 :(得分:0)
Exception chaining仅适用于Python 3.它在2.X系列中不可用。
有关详细信息,请参阅此答案:https://stackoverflow.com/a/16414892/1055722
编辑:仔细阅读,你不是在讨论两个嵌套的例外情况,而是关于一个又一个吗?
在这种情况下,您可以使用sys.excepthook
捕获并存储最后10个异常(例如),以便您可以从pdb查看异常历史记录。