2008-09-30 86 views
6

我使用mechanize模块从Python执行一些Web查询。我希望我的程序能够具有良好的错误处理能力,并能够优雅地处理各种错误(错误的URL,403/404 responsese)。但是,我无法在机械化文档中找到针对各种错误引发的错误/异常。Python机械化模块的错误

我只是把它叫做:

self.browser = mechanize.Browser() 
    self.browser.addheaders = [('User-agent', browser_header)] 

    self.browser.open(query_url) 
    self.result_page = self.browser.response().read() 

我怎么能知道在这里可以抛出什么错误/异常和处理?

回答

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'] 
+0

正如尼古拉斯指出的,机械化常传播的urllib2例外 - 见[亚历山大链接到的urllib2文档】(http://docs.python.org/lib/module-urllib2.html) – 2011-12-11 21:45:39

1

我发现这在他们的文档:

要注意的最后一件事是,有 一些包罗万象的裸除了:在模块中 陈述有 有处理突发错误输入 而不会崩溃你的程序。如果这个 发生,这是一个机械化的错误,所以 请寄给我警告文本。

所以我想他们不会产生任何异常。您还可以搜索Exception子类的源代码并查看它们的使用方式。

+1

我不确定你是对的,因为机械化似乎从基础urllib2调用中传播异常 – 2008-09-30 06:12:40

+0

在这种情况下,urllib2异常记录非常详尽:http://docs.python.org/lib/module- urllib2.html – 2008-09-30 06:35:27

3

虽然这已经是很久以前发布的,我觉得还是有必要正确地回答这个问题,因为它在谷歌的搜索结果中出现的过这个问题。

写此,机械化(版本 =(0,1,11,无,无))在Python 265引发urllib2.HTTPError等HTTP状态,可通过捕捉该异常,例如:

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