【问题标题】:Python httplib2 Handling ExceptionsPython httplib2 处理异常
【发布时间】:2011-10-09 02:13:13
【问题描述】:

我有这个非常简单的代码来检查一个站点是启动还是关闭。

import httplib2
h = httplib2.Http()
response, content = h.request("http://www.folksdhhkjd.com")
if response.status == 200:
    print "Site is Up"
else:
    print "Site is down"

当我输入一个有效的 URL 时,它会正确打印 Site is Up,因为状态是 200,正如预期的那样。但是,当我输入一个无效的 URL 时,它不应该打印站点已关闭吗?相反,它会打印一个类似这样的异常

Traceback (most recent call last):
  File "C:\Documents and Settings\kripya\Desktop\1.py", line 3, in <module>
    response, content = h.request("http://www.folksdhhkjd.com")
  File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1436, in request
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
  File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1188, in _request
    (response, content) = self._conn_request(conn, request_uri, method, body, headers)
  File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1129, in _conn_request
    raise ServerNotFoundError("Unable to find the server at %s" % conn.host)
ServerNotFoundError: Unable to find the server at www.folksdhhkjd.com

如何覆盖此异常并打印我自定义的“站点已关闭”消息?有什么指导吗?

编辑

还有一个问题......使用有什么区别

h = httplib2.Http('.cache')   

h = httplib2.Http()   

【问题讨论】:

    标签: python httplib2


    【解决方案1】:
    h = httplib2.Http('.cache')   
    

    将它检索到的内容缓存在一个名为.cache 的目录中,因此如果您两次执行相同的请求,它可能不必实际获取所有内容两次;以点开头的文件隐藏在 POSIX 文件系统中(如在 Linux 上)。

    h = httplib2.Http()
    

    不缓存它的结果,所以你每次都必须得到所有请求的东西。

    【讨论】:

    • 哦,所以...听起来最好的做法是使用h = httplib2.Http('.cache') 。非常感谢!
    • 无论如何我都对这两个答案投了赞成票。谢谢!
    • 我正在尝试使用类似sf = open('C:/Documents and Settings/user/Desktop/1.txt', 'r') for line in sf: active = 0 print "Current URL is: \t" + line try: response, content = h.request(line) if response.status==200: active=1 except httplib2.ServerNotFoundError: print "Site is Down" sf.close() 的文件遍历 URL,该文件中的一个 URL 是 fastbookmarking.info。该网站已上线。我检查了状态码及其 200
    • 但由于某种原因.. 它显示“站点已关闭” 有人可以解释原因吗?
    • 您正在阅读的文件中的行有问题。试试h.request(line.strip()),通常确保网址完全正确。
    【解决方案2】:
    try:
        response, content = h.request("http://www.folksdhhkjd.com")
        if response.status==200:
            print "Site is Up"
    except httplib2.ServerNotFoundError:
        print "Site is Down"
    

    您的代码的问题是,如果主机没有响应,则请求不会返回任何状态代码,因此库会引发错误(我认为这是库本身的特性,正在执行某种尝试发出请求之前的 DNS 解析)。

    【讨论】:

    • 哇,我现在应该学习基本的异常处理...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多