Python httplib2 Обработка исключений - PullRequest
5 голосов
/ 20 июля 2011

У меня есть очень простой код, чтобы проверить, работает ли сайт или нет.

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-адрес, он правильно печатает «Сайт активен», потому что статус «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

Как я могу переопределить это исключение и напечатать мое пользовательское сообщение "Сайт не работает"? Любое руководство, пожалуйста?

EDIT

Также еще один вопрос ... в чем разница между

h = httplib2.Http('.cache')   

и

h = httplib2.Http()   

Ответы [ 2 ]

7 голосов
/ 20 июля 2011
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 перед попыткой сделать запрос).

4 голосов
/ 20 июля 2011
h = httplib2.Http('.cache')   

Кэширует данные, которые он получает, в каталоге с именем .cache, поэтому, если вы делаете один и тот же запрос дважды, на самом деле может не потребоваться получить все дважды; файл, начинающийся с точки, скрыт в файловых системах POSIX (как в Linux).

h = httplib2.Http()

Не кеширует свои результаты, поэтому вам нужно каждый раз получать все запрошенное.

...