在交互式提示(REPL)上调试Python代码时,通常我会写一些引发异常的代码,但是我没有将其包装在try/中except,因此一旦引发错误,我就永远失去了异常对象。
try
except
通常,Python打印出的回溯和错误消息是不够的。例如,在获取URL时,服务器可能会返回40x错误,并且您需要通过error.read()…来响应内容,但是您再也没有错误对象了。例如:
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
德拉特,回应的主体怎么说?它可能包含有价值的错误信息…
我意识到通常可以很容易地重新运行包含在try / except中的代码,但这并不理想。我还意识到,在这种特定情况下,如果我使用的是requests库(不会因HTTP错误而引发错误),我就不会遇到这个问题……但是我真的很想知道是否有更通用的方法来获取在这种情况下,Python提示符下的最后一个异常对象。
requests
该sys模块提供了一些功能事后检查的异常:sys.last_type,sys.last_value,和sys.last_traceback。
sys
sys.last_type
sys.last_value
sys.last_traceback
sys.last_value 是您要寻找的那个。