Python:尝试为多种错误类型引发多用途异常

时间:2012-07-28 00:47:13

标签: python try-catch urllib2 urllib

我在python中使用urllib和urllib2并使用它们从网址中检索图像。

使用类似的东西:

try:
    buffer=urllib2.url_open(urllib2.Request(url))
    f.write(buffer)
    f.close
except (Errors that could occur):    #Network Errors(?)
    print "Failed to retrieve "+url
    pass

现在经常发生的事情是,当通过普通网络浏览器使用网站时,图像不会加载/损坏,这可能是因为服务器负载过高或者因为图像不存在或服务器无法检索。

无论原因是什么,图像都不会加载,并且在使用脚本时也可能/可能发生类似的情况。因为我不知道它可能会出现什么错误,所以如何处理呢?

我认为提到urllib2中的所有可能错误,在except语句中的urllib库可能有点过分,所以我需要一个更好的方法。

(我可能还需要/必须处理损坏的Wi-Fi,无法访问的服务器等,有时会出现更多错误)

3 个答案:

答案 0 :(得分:5)

你会看到只有两个例外,HTTPError(HTTP状态代码)和URLError(可能出错的一切),所以它不像过度杀死它们一样。如果你不关心状态代码,你甚至可以捕获URLError,因为HTTPError是它的子类。

答案 1 :(得分:2)

如果您只想打印发生的事情的说明,只需打印异常本身。

except Exception, e: 
    print e

异常对象的 str ()方法将为您检索人类可读的消息。

答案 2 :(得分:1)

This是关于在python中处理异常的一篇很棒的wiki文章。您可以使用SilverbackNet's Answer,或者,如果您想捕获所有错误,那么这里有一个很好的配方。它也非常适合记录回溯并找出引发的任何其他可能的错误。

import sys
try:
    buffer=urllib2.url_open(urllib2.Request(url))
    f.write(buffer)
    f.close() #you didn't have the parentheses in your sample
except: # catch *all* exceptions
    e = sys.exc_info()[0] #this returns a 3-tuple; (type, value, traceback)
    print 'Error: %s' % e