Ошибки модуля Python Mechanize

Я использую модуль 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()

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
6
0
6 412
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

One final thing to note is that there are some catch-all bare except: statements in the module, which are there to handle unexpected bad input without crashing your program. If this happens, it's a bug in mechanize, so please mail me the warning text.

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

Я не уверен, что вы правы, потому что механизация, похоже, распространяет исключения из базовых вызовов urllib2.

Eli Bendersky 30.09.2008 10:12

В этом случае исключения urllib2 очень хорошо документированы: docs.python.org/lib/module-urllib2.html

Alexander Kojevnikov 30.09.2008 10:35
Ответ принят как подходящий

$ perl -0777 -ne'print qq() 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']

Как указывает Николас, Mechanize часто распространяет исключения urllib2 - см. Ссылка Alexanders на документацию urllib2

James Broadhead 12.12.2011 01:45

@James Broadhead: HTTPError, который вы видите выше являетсяurllib2.HTTPError. Вам нет нужно явно импортировать urllib2. mechanize предоставляет расширенный набор интерфейса urllib2.

jfs 12.12.2011 02:00

Вы правы в том, что не нужно явно ссылаться на urllib2 - я просто хотел дать ссылку на документацию.

James Broadhead 12.12.2011 15:35

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

Когда я пишу это, Mechanize (версия = (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: mechanize предоставляет расширенный набор интерфейса urllib2. mechanize.HTTPError is urllib2.HTTPError.

jfs 12.12.2011 01:59

Другие вопросы по теме