簡體   English   中英

如何在python中恢復舊的回溯? (例如倒數第二)

[英]How do I recover an older traceback in python? (eg second to last)

我相信你發現自己處於這種狀況,我懷疑沒有辦法解決這個問題。 假設您運行了一些引發異常的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以防萬一

異常鏈僅在Python 3中可用。它在2.X系列中不可用。

有關更多詳細信息,請參閱此答案: https//stackoverflow.com/a/16414892/1055722

編輯:更仔細地閱讀,你不是在談論兩個嵌套的異常,而是關於一個又一個?

在這種情況下,您可以使用sys.excepthook捕獲並存儲最后10個異常(例如),以便您可以從pdb查看異常歷史記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM