6

我正在使用该mechanize模块从 Python 执行一些 Web 查询。我希望我的程序能够容错并优雅地处理各种错误(错误的 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()

我怎么知道这里可以抛出哪些错误/异常并处理它们?

4

3 回答 3

8
$ 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']
于 2008-09-30T21:15:47.510 回答
3

虽然这是很久以前发布的,但我认为仍然需要正确回答这个问题,因为它出现在谷歌的搜索结果中。

在我写这篇文章时,Python 265 中的 mechanize ( version = (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
于 2011-01-10T16:27:15.590 回答
1

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

最后要注意的一点是,模块中有一些包罗万象的 except: 语句,它们用于处理意外的错误输入而不会使程序崩溃。如果发生这种情况,这是机械化中的一个错误,所以请把警告文本发给我。

所以我想他们不会提出任何例外。您还可以搜索 Exception 子类的源代码并查看它们的使用方式。

于 2008-09-30T06:06:44.370 回答