python读取和验证输入url

python读取和验证输入url,python,url,input,Python,Url,Input,可能重复: 你能帮我查一下这个密码吗 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.'

可能重复:

你能帮我查一下这个密码吗

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!'

在URL前面加
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>>
[16]中的
:response=urllib2.urlopen(“http://www.google.com")
在[17]中:答复
出[17]:

urllib2模块定义了一些函数和类,这些函数和类有助于在复杂世界中打开URL(主要是HTTP)——基本和摘要身份验证、重定向、cookie等等。

尝试在输入中输入完整的URL:

输入某物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>>

您需要指定请求的类型,以便它能够正确地理解和处理请求(在本例中为
http
)。

如果您试图从中实现代码,您将注意到您已经添加并缩进了不需要的else。在python中,空格很重要。我在上一个答案中给出的代码是正确的,您只是复制了错误的代码。您的代码应如下所示(与我之前的答案相同):

else子句是try的一部分,但不是异常测试的一部分。基本上,如果没有引发异常,则url是有效的。如果输入,以下代码将给出此结果

如果您输入,您将获得:


您提供的堆栈显示您得到的是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,请使用
url.lower().startswith('http://')或…


还要注意,urlopen可以抛出许多其他异常,因此您可能还希望捕获一个通用的
异常。您可以找到更详细的讨论

请编辑您的文章并将其格式化以便于阅读-您尝试了什么?你的问题到底是什么?我想让用户输入一个url,然后验证它。
Traceback(最后一次调用):文件“C:/Users/r00t-7/PycharmProjects/untitled/sample.py”,第7行,响应=urlopen(req)文件“C:\Python25\lib\urllib2.py”,第121行,在urlopen return\u opener.opener(url,data)文件中“C:\Python25\lib\urllib2.py”,第366行,在open protocol=req.get_type()文件“C:\Python25\lib\urllib2.py”中,第241行,在get_type raise ValueError中,“未知url类型:%s”%self.\uu原始值错误:未知url类型:www.google.com进程已完成,退出代码为1
我认为您的
else
子句需要取消缩进。现在,当出现Url错误时,它只会打印“Url是好的!”。好吧,我试着用这种方式检查协议,有更好的主意吗<代码>如果url[0:7]==“http://”或url[0:8]==“https://”或url[0:6]==“ftp://”:[使用url做点什么…]
我知道,但我想检查它,我希望我的代码友好,用户只需输入它..我做了这些..啊,我的错误-我以为你在问为什么代码不工作。很高兴你找到了答案!我用python以简洁的方式写了这篇文章,现在我必须在web2py中使用它,这是我在你们的帮助下编写的代码,谢谢大家,如果你们认为可以更好,请评论一下,我爱你们。。顺便说一下,因为我是stackoverflow的新手,我可以在4小时后发布我的answear。很乐意帮忙。如果你的问题有一个正确的答案,一定要选择它,这样帮助过你的人就会得到奖励。当然,问题是我的声誉不到15:))你的代表不需要超过15岁就可以接受答案,只需要对一个问题或答案投赞成票。要选择并回答问题,请参阅:
python test.py 
enter somethinghttp://www.google.com/bad
The server couldn't fulfill the request.
Error code:  404
"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