ggl*_*gll 5 python debugging ipython traceback pdb
我相信你发现自己处于这种情况,我怀疑没有办法摆脱这种情况。假设您运行了一些引发异常的 python 代码,然后您想查看它,但在这样做时不小心引发了另一个异常。如果您现在尝试事后调试,您将看到后一个异常的回溯。我的问题是,前者会永远消失吗?
例子:
def my_buggy_function(x):
    y = x + 1
    raise RuntimeError
Run Code Online (Sandbox Code Playgroud)
第 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: 
Run Code Online (Sandbox Code Playgroud)
第 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 
Run Code Online (Sandbox Code Playgroud)
第 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
Run Code Online (Sandbox Code Playgroud)
如果我想在倒数第二个回溯中访问 y 怎么办,它会永远丢失吗?
注意:我正在使用 ipython/ipdb 以防万一
异常链仅在 Python 3 中可用。在 2.X 系列中不可用。
有关更多详细信息,请参阅此答案:/sf/answers/1149042471/
编辑:仔细阅读,您不是在谈论两个嵌套异常,而是在谈论一个接着另一个?
在这种情况下,您可以用来sys.excepthook捕获并存储最后 10 个异常(例如),以便您可以从 pdb 查看异常历史记录。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           498 次  |  
        
|   最近记录:  |