2012-03-12 31 views
5

我想不通爲什麼traceback.format_exc()在下面的例子將返回「無」:使用Python 2.7.1traceback.format_exc/print_exc回報無期待,當回溯

#!/usr/bin/env python 

import sys 
import traceback 

def my_excepthook(type, value, tb): 
    print type.__name__ 
    print value 
    # the problem: why does this return "None"? 
    print traceback.format_exc(tb) # see http://docs.python.org/library/traceback.html#traceback.format_exc 

sys.excepthook = my_excepthook # see http://docs.python.org/library/sys.html#sys.excepthook 

# some code to generate a naturalistic exception 
a = "text" 
b = 5 
error = a + b 

,我得到下面的輸出:

TypeError 
cannot concatenate 'str' and 'int' objects 
None 

而是3號線「無」的,我期望得到什麼發生在我註釋掉sys.excepthook行:

Traceback (most recent call last): 
    File "log-test.py", line 17, in <module> 
    error = a+b 
+0

看的文檔的format_exc - 你不需要通過'tb'作爲參數。您可能打算使用'format_tb(tb)'代替。 – 2012-03-12 22:50:16

+0

Thomas K,你說得對,'format_exc()'帶有一個可選的限制,而不是一個追蹤對象。上面的代碼出現在很多試驗和錯誤的結尾(我試圖按照我希望它們工作的方式進行嘗試)。在Python文檔中,我發現自己經常被'module.function()'和'object.function()'混淆,並且花了很多時間爲了'tb.format_exc()'不工作而搔頭。 – 2012-03-13 04:40:25

回答

4

嘗試在my_excepthook這樣的改變:

print "".join(traceback.format_exception(type, value, tb)) 
+0

PasteBT,謝謝,你釘了它。 (猜測我一直假設解決方案會更容易/更明顯)。 – 2012-03-13 04:33:49