【问题标题】:Errors with Python's mechanize modulePython的机械化模块错误
【发布时间】:2010-09-14 04:40:46
【问题描述】:

我正在使用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 exception urllib2 mechanize


    【解决方案1】:
    $ 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']
    

    【讨论】:

    • 正如 Nicolas 指出的那样,mechanize 经常传播 urllib2 异常 - 请参阅 Alexanders link to the urllib2 documentation
    • @James Broadhead:您在上面看到的HTTPError urllib2.HTTPError。您确实不需要显式导入urllib2mechanize 提供了urllib2 接口的超集。
    • 您不必明确引用 urllib2 是对的 - 我的意思只是链接到文档。
    【解决方案2】:

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

    在我写这篇文章时,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
    

    【讨论】:

    • -1: mechanize 提供了urllib2 接口的超集。 mechanize.HTTPError is urllib2.HTTPError.
    【解决方案3】:

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

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

    所以我猜他们不会引发任何异常。您还可以搜索 Exception 子类的源代码,看看它们是如何使用的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多