在通过web2by我想先验证URL的,如果它不是有效的建立了一个缩短儿又回到第一页有错误消息。 这是我在控制器代码(MVC拱。),但我不明白什么是错的.. !!
import urllib
def index():
return dict()
def random_maker():
url = request.vars.url
try:
urllib.urlopen(url)
return dict(rand_url = ''.join(random.choice(string.ascii_uppercase +
string.digits + string.ascii_lowercase) for x in range(6)),
input_url=url)
except IOError:
return index()
使用httplib的你不能检查HTTP响应代码。 如果是200,则页面是有效的,如果是别的(如404)或错误,那么它是无效的。
看到这个问题: 什么是得到一个URL的HTTP响应代码的最佳方式?
更新:
基于您的评论,它看起来像你的问题是,你如何处理错误。 你只处理IO错误的问题。 你的情况,你可以处理所有的错误单独切换到:
except:
return index()
您也可以通过重写http_default_error建立自己的异常处理程序。 请参阅如何赶上urllib.urlretrieve 404错误的详细信息。
或者你也可以切换到的urllib2它有特定的错误,然后您就可以搞定的urllib2抛出这样的具体错误:
from urllib2 import Request, urlopen, URLError
req = Request('http://jfvbhsjdfvbs.com')
try:
response = urlopen(req)
except URLError, e:
if hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ', e.reason
elif hasattr(e, 'code'):
print 'The server couldn\'t fulfill the request.'
print 'Error code: ', e.code
else:
print 'URL is good!'
与上面的代码将返回:
We failed to reach a server.
Reason: [Errno 61] Connection refused
每个异常类的细节都包含在了urllib.error API文档。
我不完全知道如何插槽该到你的代码,因为我不知道到底是什么你正在尝试做的,但IO错误是不会处理由urllib的抛出的异常。