6

このモジュールを使用して、mechanizePython から Web クエリを実行しています。私は自分のプログラムがエラー耐性があり、あらゆる種類のエラー (間違った URL、403/404 応答など) を適切に処理できるようにしたいと考えています。ただし、me​​chanize のドキュメントには、さまざまなエラーに対してスローされるエラー/例外が見つかりません。

私はちょうどそれを呼び出す:

    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

これはかなり前に投稿されたものですが、まさにこの質問に対する Google の検索結果に表示されるため、質問に正しく答える必要があると思います。

私がこれを書いているとき、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: ステートメントがいくつかあるということです。これが発生した場合は、mechanize のバグですので、警告文をメールで送ってください。

したがって、例外は発生しないと思います。ソース コードで Exception サブクラスを検索し、それらがどのように使用されているかを確認することもできます。

于 2008-09-30T06:06:44.370 に答える