有沒有什麼辦法讓ipython只顯示被抓到的 的Exception,而不是顯示它被抓到的代碼中的哪個位置?
你可以使用sys.excepthook
:
import sys
def exc_hook(type, value, traceback):
print type
sys.excepthook = exc_hook
從sys
module documentation:
sys.excepthook(type, value, traceback)
此功能打印出給定的追蹤和異常 sys.stderr。
當引發並未捕獲到異常時,解釋器將調用 sys.excepthook,其中包含三個參數,異常類,異常 實例和回溯對象。在交互式會話中,這個 恰好在控制返回提示之前發生;在Python 程序中,這個程序在程序退出之前就發生了。 的處理可以通過將另一個 三參數函數分配給sys.excepthook
來定製此類頂級例外。
sys.__displayhook__
sys.__excepthook__
這些對象包含在程序開始displayhook和 excepthook的原始值。他們被保存,以便 displayhook和excepthook可以在它們碰巧得到 被破壞的對象取代的情況下被恢復。
您也可以嘗試開始的IPython與--xmode
選項設置爲Plain
從IPython reference:
$ ipython [options] files
--xmode=<modename>
模式的異常報告。
有效模式:普通,上下文和詳細。
Plain:類似於python的普通回溯打印。
上下文:在回溯的每一行周圍打印5行上下文源代碼。
放牧:類似於上下文,但另外打印變量當前可見異常發生的位置(縮短其 字符串如果太長)。如果發生 有巨大的數據結構,其字符串表示形式很複雜 來計算,這可能會非常緩慢。您的計算機可能會以100%的速度使用cpu 凍結一段時間。如果發生這種情況,您可以使用Ctrl-C(可能會多次觸碰它)取消跟蹤。
以下是一些示例用法。注意對於每個追逆中的行的區別:
--xmode=Plain
:
[ 19:55 [email protected] ~/SO/python ]$ ipython --xmode=Plain ipython-debugger-full-traceback-on-interactive-pdb.py
------------------------------------------------------------
Traceback (most recent call last):
File "ipython-debugger-full-traceback-on-interactive-pdb.py", line 2, in <module>
1/0
ZeroDivisionError: integer division or modulo by zero
--xmode=Context
:
[ 19:55 [email protected] ~/SO/python ]$ ipython --xmode=Context ipython-debugger-full-traceback-on-interactive-pdb.py
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>()
1
----> 2 #!/usr/bin/python
3 1/0
4
5
ZeroDivisionError: integer division or modulo by zero
--xmode=Verbose
:
[ 19:54 [email protected] ~/SO/python ]$ ipython --xmode=Verbose ipython-debugger-full-traceback-on-interactive-pdb.py
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>()
1
----> 2 #!/usr/bin/python
3 1/0
4
5
ZeroDivisionError: integer division or modulo by zero
而且沒有指定.py文件:
--xmode=Plain
:
[ 19:55 [email protected] ~/SO/python ]$ ipython --xmode=Plain
In [1]: 1/0
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
--xmode=Context
:
[ 20:03 [email protected] ~/SO/python ]$ ipython --xmode=Context
In [1]: 1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
/home/jon/SO/python/<ipython console> in <module>()
ZeroDivisionError: integer division or modulo by zero
--xmode=Verbose
:
[ 20:01 [email protected] ~/SO/python ]$ ipython --xmode=Verbose
In [1]: 1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
/home/jon/SO/python/<ipython console> in <module>()
ZeroDivisionError: integer division or modulo by zero
Using the Python debugger。
這是IPython 0中的一個錯誤。11 - 回溯在離開調試器後打印,而不是在開始之前打印。它將被固定爲0.12(這應該在聖誕節之前)。 –