Ошибки с модулем Python для механизации - PullRequest
6 голосов
/ 30 сентября 2008

Я использую модуль mechanize для выполнения некоторых веб-запросов из Python. Я хочу, чтобы моя программа была устойчивой к ошибкам и корректно обрабатывала все виды ошибок (неправильные URL, 403/404). Тем не менее, я не могу найти в документации механизатора ошибки / исключения, которые он выдает для различных ошибок.

Я просто называю это с:

    self.browser = mechanize.Browser()
    self.browser.addheaders = [('User-agent', browser_header)]

    self.browser.open(query_url)
    self.result_page = self.browser.response().read()

Как я могу узнать, какие ошибки / исключения могут быть выданы здесь, и обработать их?

Ответы [ 3 ]

8 голосов
/ 01 октября 2008
$ 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']
3 голосов
/ 10 января 2011

Хотя это было опубликовано давным-давно, я думаю, что по-прежнему необходимо правильно ответить на вопрос, так как он появляется в результатах поиска Google по этому самому вопросу.

Когда я пишу это, mechanize ( version = (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
1 голос
/ 30 сентября 2008

Я нашел это в их документах:

И последнее, на что следует обратить внимание: некоторые догадки за исключением: операторы в модуле, которые являются там обрабатывать неожиданный плохой ввод без сбоя вашей программы. Если это бывает, это ошибка в механизации, так пожалуйста, напишите мне текст предупреждения.

Так что, я думаю, они не создают никаких исключений. Вы также можете найти в исходном коде подклассы Exception и посмотреть, как они используются.

...