5

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

使用类似于:

尝试:
    缓冲区=urllib2.url_open(urllib2.Request(url))
    f.write(缓冲区)
    f.close
除了(可能发生的错误):#Network Errors(?)
    print "检索失败"+url
    经过

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

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

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

(我有时也可能需要/不得不处理损坏的 Wi-Fi、无法访问的服务器等,因此会出现更多错误)

4

3 回答 3

5

您只会看到两个异常,HTTPError(HTTP 状态代码)和 URLError(所有可能出错的情况),因此处理这两个异常并不是矫枉过正。如果您不关心状态代码,您甚至可以捕获 URLError,因为 HTTPError 是它的子类。

于 2012-07-28T00:57:15.837 回答
2

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

except Exception, e: 
    print e

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

于 2012-07-28T01:00:26.927 回答
1

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

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
于 2012-07-28T01:17:07.020 回答