2012-03-14 17 views
1

これは私のクラスがどのように見えるかです:それはないすべては、すべてのエラーコードを処理することですのpython urllib2のライブラリシンプルはhttp_error_defaultエラーハンドラ

class ExtHTTPErrorProcessor (urllib2.BaseHandler): 

def http_error_default(self, req, fp, code, msg, hdrs): 
    print code 
    return res 
... 
... 
opener = urllib2.build_opener(ExtHTTPErrorProcessor()) 
urllib2.install_opener(opener) 
urllib2.urlopen(request, data) 

。私はドキュメントから正確なフォーマットに従います:http://docs.python.org/library/urllib2.html#urllib2.BaseHandler.http_error_default エラーコード400が来たら、私のhttp_error_defaultをまったく呼び出さず、urllib2のものを呼び出しています。 HTTPエラー(req.get_full_url()、code、msg、hdrs、fp)のファイル "/usr/local/lib/python2.7/urllib2.py" 521行urllib2.HTTPError:HTTPエラー400 :Bad Request

メソッドhttp_error_400を追加しようとしましたが、このメソッドは呼び出されますが、実際にはhttp_error_defaultが必要です。私は本当にデフォルトのものが必要です。

答えて

1

this vague old threadによれば、 "ファンシー" URLオープナーで明示的なハンドラを指定する必要があります...私はmy simple working solutionに固執しています。 try ... exceptブロックを追加するだけです。