我的应用程序需要获取图像网址,检查它们是否实际指向图像,然后再做一些事情。 Bellow是我检查URL有效的方法。
@staticmethod
def urlReturnsOK(url):
""" Check that the given URL links to an existing image, return false if not """
try:
response = urllib2.urlopen(url)
if response.code == 200:
return True
except urllib2.HTTPError, e:
logging.debug('Testing URL: %s returned HTTPError %s' % (url, e.code))
except urllib2.URLError, e:
logging.debug('Testing URL: %s returned URLError %s' % (url, e.args))
except UnicodeEncodeError, e:
logging.debug("THIS CAUSES PROBLEMS +++++++++ %s "% url)
return False
在某些网址上(所有网址都指向图片,假设它们是正确的)我得到以下异常:
UnicodeEncodeError:'ascii'编解码器无法对字符u'\ xe9'进行编码 第49位:序数不在范围内(128)
添加expect子句时,我可以看到一个导致问题的URL就是这个(注意非标准字母):
http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1 /BustAntonioGutiérrezdeOteroySantayana.PNG/ 200像素-BustAntonioGutiérrezdeOteroySantayana.PNG
接下来尝试调试时,我在python脚本中执行以下操作:
>>> import urllib2
>>> response = urllib2.urlopen('http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/BustAntonioGutiérrezdeOteroySantayana.PNG/200px-BustAntonioGutiérrezdeOteroySantayana.PNG')
>>> print response.code
200
>>>
此时我不确定我需要更改什么,并且无法解释为什么该方法适用于控制台,而不是我的代码。我假设问题出在非标准字母上,但不知道如何修复它。有什么建议吗?
更新
正如有人建议的那样,这个问题已经得到了解答,虽然我仍然不明白为什么打开控制台的链接有效?