Ошибки с модулем механизации Python
Вопрос
я использую mechanize
модуль для выполнения некоторых веб-запросов из Python.Я хочу, чтобы моя программа была устойчивой к ошибкам и корректно обрабатывала все виды ошибок (неправильные URL-адреса, ответы 403/404).Однако я не могу найти в документации mechanize ошибки/исключения, которые он выдает при различных ошибках.
Я просто называю это:
self.browser = mechanize.Browser()
self.browser.addheaders = [('User-agent', browser_header)]
self.browser.open(query_url)
self.result_page = self.browser.response().read()
Как я могу узнать, какие ошибки/исключения могут возникнуть здесь, и обработать их?
Решение
$ perl -0777 -ne'print qq($1) if /__all__ = \[(.*?)\]/s' __init__.py | grep Error
'BrowserStateError',
'ContentTooShortError',
'FormNotFoundError',
'GopherError',
'HTTPDefaultErrorHandler',
'HTTPError',
'HTTPErrorProcessor',
'LinkNotFoundError',
'LoadError',
'ParseError',
'RobotExclusionError',
'URLError',
Или:
>>> import mechanize
>>> filter(lambda s: "Error" in s, dir(mechanize))
['BrowserStateError', 'ContentTooShortError', 'FormNotFoundError', 'GopherError'
, 'HTTPDefaultErrorHandler', 'HTTPError', 'HTTPErrorProcessor', 'LinkNotFoundErr
or', 'LoadError', 'ParseError', 'RobotExclusionError', 'URLError']
Другие советы
Хотя это было опубликовано уже давно, я думаю, что все еще необходимо правильно ответить на этот вопрос, поскольку он появляется в результатах поиска Google по этому самому вопросу.
Пока я это пишу, механизируйте(версия = (0, 1, 11, None, None)) в Python 265 вызывает urllib2.HTTPError, поэтому статус http доступен путем перехвата этого исключения, например:
import urllib2
try:
... br.open("http://www.example.org/invalid-page")
... except urllib2.HTTPError, e:
... print e.code
...
404
Я нашел это в их документах:
Последнее, что нужно отметить, это то, что есть какая-то общеобразное, кроме:операторы в модуле, которые должны обрабатывать неожиданный плохой ввод без сбоя вашей программы.Если это произойдет, это ошибка в Mechanize, поэтому, пожалуйста, отправьте мне предупреждающий текст.
Так что я думаю, они не делают никаких исключений.Вы также можете выполнить поиск в исходном коде подклассов Exception и посмотреть, как они используются.