在交互式提示符(REPL)調試Python代碼時,通常會編寫一些引發異常的代碼,但我沒有將它包裝在try
/except
中,所以一旦出現錯誤,我就永遠失去了異常對象。如何在Python提示符下發生錯誤後獲取最後一個異常對象?
通常Python打印出來的追溯和錯誤信息是不夠的。例如,當獲取一個URL時,服務器可能會返回一個40x錯誤,並且您需要通過error.read()
的響應內容...但您還沒有收到錯誤對象。例如:
>>> import urllib2
>>> f = urllib2.urlopen('http://example.com/api/?foo=bad-query-string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
urllib2.HTTPError: HTTP Error 400: Bad Request
Drat,迴應的內容是什麼意思?它可能有它寶貴的錯誤信息...
我意識到它通常很容易重新運行你的代碼包裝在一個嘗試/除了,但這並不理想。我也意識到,在這個特定的情況下,如果我使用requests
庫(它不會引發HTTP錯誤),我不會遇到這個問題......但我真的想知道是否有更一般的方法來獲取這些情況下,在Python提示符下的最後一個異常對象。
非常好,謝謝!按文件記錄工作。奇怪我的谷歌搜索沒有發現,但哦。 (儘管作爲一名經驗豐富的Python開發人員,我每天都會學習Python或其標準庫......) – 2013-03-25 01:39:46
@BenHoyt根據'sys'的文檔,僅供參考「這三個僅在交互式會話中可用回溯已被打印。「 – satoru 2014-02-07 02:21:46
@satoru很明顯。在正常程序中,未處理的異常將終止程序。 – Cairnarvon 2014-02-07 10:50:57