你会帮我解释一下这段代码吗?可能重复:
web2py url validator
from urllib2 import Request, urlopen, URLError
url = raw_input('enter something')
req = Request(url)
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!'
答案 0 :(得分:3)
如果您尝试实现web2py url validator中的代码,您会注意到已添加并缩进其他不需要的代码。白色空间在python中很重要。我之前的答案中给出的代码是正确的,您刚刚错误地复制了它。你的代码应该是这样的(与我以前的答案相同):
from urllib2 import Request, urlopen, URLError
url = raw_input('enter something')
req = Request(url)
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!'
else子句是try的一部分,但不是异常测试的一部分。基本上,如果没有抛出异常,则url有效。如果输入http://www.google.com
,以下代码会为您提供此结果python test.py
enter somethinghttp://www.google.com
URL is good!
如果您输入http://www.google.com/bad,则会获得:
python test.py
enter somethinghttp://www.google.com/bad
The server couldn't fulfill the request.
Error code: 404
答案 1 :(得分:2)
尝试在输入中输入完整的网址:
entersomething http://www.google.com
您需要指定请求的类型,以便它理解正确处理它(在这种情况下,http
)。
答案 2 :(得分:0)
前缀网址为http://
示例http://www.google.com
In [16]: response = urllib2.urlopen("http://www.google.com")
In [17]: response
Out[17]: <addinfourl at 28222408 whose fp = <socket._fileobject object at 0x01AE59B0>>
urllib2模块定义了有助于在复杂世界中打开URL(主要是HTTP)的函数和类 - 基本和摘要式身份验证,重定向,cookie等。
答案 3 :(得分:0)
您提供的堆栈显示您收到了ValueError
"C:\Python25\lib\urllib2.py", line 241, in get_type raise ValueError, "unknown url type: %s" % self.__original ValueError: unknown url type: www.google.com
因此,您可以为ValueError添加另一个except子句,以通知用户该url无效。
或者如果您打算更正网址,请使用url.lower().startswith('http://') or ...
另请注意,urlopen可以抛出许多其他异常,因此可能也想要捕获泛型Exception
。您可以找到更详细的讨论here