无效的 url 抛出异常 - python [英] Invalid url's throw an exception - python

查看:47
本文介绍了无效的 url 抛出异常 - python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

导入httplib导入 urlparsedef getUrl(url):尝试:部分 = urlparse.urlsplit(url)服务器 = 零件 [1]路径 = 部分 [2]obj = httplib.HTTPConnection(server,80)obj.connect()obj.putrequest('HEAD',path)obj.putheader('接受','*/*')obj.endheaders()响应 = obj.getresponse()contentType = response.getheader("content-type", "unknown")obj.close()如果 response.status !=200:打印错误"别的:打印真棒"除了例外,e:打印e

我编写了上面的代码来检查给定的 URL 是否有效.但不知何故,当我测试它时,对于每个无效的 url,它都会引发异常.

<预><代码>>>>getUrl('http://www.idlebrfffain.com')[Errno -2] 名称或服务未知

Python 版本:

chaitu@ubuntu:~$ python -V蟒蛇 2.6.4

谁能帮我找出错误的确切位置?

解决方案

你必须抓住 socket.error:

导入httplib、socket导入 urlparsedef getUrl(url):部分 = urlparse.urlsplit(url)服务器 = 零件 [1]路径 = 部分 [2]obj = httplib.HTTPConnection(server,80)尝试:obj.connect()除了 socket.gaierror:打印主机 %s 不存在" % 服务器返回除了socket.error:打印无法连接到 %s:%s."%(服务器,80)返回obj.putrequest('HEAD',path)obj.putheader('接受','*/*')obj.endheaders()响应 = obj.getresponse()contentType = response.getheader("content-type", "unknown")obj.close()如果 response.status !=200:打印错误"别的:打印真棒"getUrl('http://www.idlebrfffain.com') # 不是注册域名getUrl('http://8.8.8.8') # 不是 http 服务器

try: except: 围绕特定行并且仅当您知道会发生什么时.Python 会向您显示未捕获异常的回溯,以便您轻松找出问题所在.

import httplib
import urlparse

def getUrl(url):
   try:
     parts = urlparse.urlsplit(url)
     server = parts[1]
     path = parts[2]
     obj = httplib.HTTPConnection(server,80)
     obj.connect()
     obj.putrequest('HEAD',path)
     obj.putheader('Accept','*/*')
     obj.endheaders()
     response = obj.getresponse()
     contentType = response.getheader("content-type", "unknown")
     obj.close()
     if response.status !=200:
       print 'Error'
     else:
       print 'Awesome'
   except Exception, e:
     print e

I wrote the code above to check if a given URL is valid or not. But somehow when I test it, for every invalid url it throws an exception.

>>> getUrl('http://www.idlebrfffain.com')
[Errno -2] Name or service not known

Python version:

chaitu@ubuntu:~$ python -V
Python 2.6.4

Can anyone help me find out where exactly is the mistake?

解决方案

You have to catch socket.error:

import httplib, socket
import urlparse

def getUrl(url):
    parts = urlparse.urlsplit(url)
    server = parts[1]
    path = parts[2]
    obj = httplib.HTTPConnection(server,80)

    try:
        obj.connect()
    except socket.gaierror:
        print "Host %s does not exist" % server
        return
    except socket.error:
        print "Cannot connect to %s:%s." % (server, 80)
        return

    obj.putrequest('HEAD',path)
    obj.putheader('Accept','*/*')
    obj.endheaders()
    response = obj.getresponse()
    contentType = response.getheader("content-type", "unknown")
    obj.close()
    if response.status !=200:
        print 'Error'
    else:
        print 'Awesome'


getUrl('http://www.idlebrfffain.com') # not a registered domain
getUrl('http://8.8.8.8') # not a http server

Only try: except: around specific lines and only if you know what happens. Python will show you tracebacks for uncaught exceptions, so you can find out where the problem is with ease.

这篇关于无效的 url 抛出异常 - python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆