Python mechanize模块错误

6 投票
3 回答
6615 浏览
提问于 2025-04-11 09:24

我正在使用 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()

我该如何知道这里可能会抛出哪些错误或异常,并且如何处理它们呢?

3 个回答

1

我在他们的文档里发现了这一点:

最后要注意的是,模块里有一些通用的“裸”异常处理语句,这些是用来处理一些意外的错误输入,以避免程序崩溃。如果发生这种情况,那就是mechanize里的一个bug,所以请把警告信息发给我。

所以我想他们不会主动抛出任何异常。你也可以在源代码里搜索一下异常的子类,看看它们是怎么被使用的。

3

虽然这个问题早就有人提过了,但我觉得还是有必要正确回答一下,因为这个问题在谷歌搜索结果中经常出现。

我写这段话的时候,Python 265中的mechanize(版本 = (0, 1, 11, None, None))会引发urllib2.HTTPError错误,所以我们可以通过捕捉这个错误来获取HTTP状态,比如:

import urllib2
try:
...  br.open("http://www.example.org/invalid-page")
... except urllib2.HTTPError, e:
...  print e.code
... 
404
9
$ 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']

撰写回答