我使用追蹤模塊,像這樣:
import traceback
try:
1/0
except Exception:
print traceback.format_exc()
這給出了以下的輸出:
Traceback (most recent call last):
File "<ipython-input-3-6b05b5b621cb>", line 2, in <module>
1/0
ZeroDivisionError: integer division or modulo by zero
如果代碼從一個文件運行時,回溯會告訴錯誤發生的地方的行號和字符號:)
編輯:
從Habibutsu容納註釋:Yes, it's useful for printing, but when needed to get more info (for example function name) - not suitable
的文檔的頁面告訴你如何提取編程軌跡:http://docs.python.org/2/library/traceback.html
從上面的鏈接頁面:
>>> import traceback
>>> def another_function():
... lumberstack()
...
>>> def lumberstack():
... traceback.print_stack()
... print repr(traceback.extract_stack())
... print repr(traceback.format_stack())
...
>>> another_function()
File "<doctest>", line 10, in <module>
another_function()
File "<doctest>", line 3, in another_function
lumberstack()
File "<doctest>", line 6, in lumberstack
traceback.print_stack()
[('<doctest>', 10, '<module>', 'another_function()'),
('<doctest>', 3, 'another_function', 'lumberstack()'),
('<doctest>', 7, 'lumberstack', 'print repr(traceback.extract_stack())')]
[' File "<doctest>", line 10, in <module>\n another_function()\n',
' File "<doctest>", line 3, in another_function\n lumberstack()\n',
' File "<doctest>", line 8, in lumberstack\n print repr(traceback.format_stack())\n']
traceback.extract_stack
的文檔字符串與traceback.extract_tb
traceback.extract_tb(回溯[,極限])
返回高達限制從回溯對象追蹤提取的「預處理」堆棧跟蹤條目 列表。它對於堆棧跟蹤的替代格式是有用的 。如果省略了限制或無,則提取所有 條目。 「預處理」堆棧跟蹤條目是一個 四位(文件名,行號,函數名稱,文本),表示 通常爲堆棧跟蹤打印的信息。文本是 一個字符串,前導和尾隨空白被剝離;如果源 不可用,則爲無。
如果這是一個純粹的「學院派」的問題,爲什麼不呢,但是您不應該依賴像在實際生活代碼中檢查堆棧跟蹤等內容......而是使用自定義異常類(或許多內置函數之一)更好。 –
是的,它只是有趣的 – Habibutsu