2008-09-30 75 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