Python的机械化模块出错

时间:2008-09-30 06:03:48

标签: python exception urllib2 mechanize

我正在使用mechanize模块从Python执行一些Web查询。我希望我的程序具有错误恢复能力,并优雅地处理各种错误(错误的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 个答案:

答案 0 :(得分: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']

答案 1 :(得分:3)

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

在我写这篇文章时,Python 265中的机械化(版本 =(0,1,11,无,无))会引发urllib2.HTTPError,因此通过捕获此异常可以获得http状态,例如:

import urllib2
try:
...  br.open("http://www.example.org/invalid-page")
... except urllib2.HTTPError, e:
...  print e.code
... 
404

答案 2 :(得分:1)

我在他们的文档中找到了这个:

  

最后要注意的是那里   除了:   模块中的语句,是   那里处理意外的错误输入   没有崩溃你的程序。如果这   碰巧,这是机械化的一个错误,所以   请把警告文本邮寄给我。

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