- Python 3で追加されたhttp.client.HTTPExceptionではなく、既に存在しないhttplib.HTTPException を捕捉しようとしている箇所でNameErrorが発生する。
- HTTPConnectionWithTimeoutクラスのconnect()メソッドでUnboundLocalErrorが発生する。
という2つの問題が発生した。
本家サイトではそれぞれIssue 79とIssue 80で報告されている問題と同じ問題のようだが、currentでも完全には修正されていなかったので、currentに対するpatchを作ってみた。
Issue 79の対策は、Python 3のsocket.create_connection()がtimeout属性に対応済みなので、そちらを使うようにしてみたが、timeout属性のデフォルトがHTTPConnectionWithTimeout.connect()はNone、socket.create_connection()は_GLOBAL_DEFAULT_TIMEOUTという違いがあったので、素人なりに一応配慮してみた。
Issue 80の方は標準モジュールの名前が違っていただけなので特に問題はないはず。
patchをあてるのが面倒な方は、下記の修正済みのファイルをお手元の httplib2/python3/httplib2 の同名ファイルと置換してみてください。
それにしても、httplib2は「Dive into Python 3」で紹介されるぐらいには有名なモジュールのはずなのに、ちょっと使えばすぐ発生する程度のエラーが、報告があったにも関わらず放置されている様子をみると、Python 3を実際に使ってる開発者はPython初心者の私が想像していた以上に少ないんだろうなーと思わざるを得ない。
結局、このエントリのタイトルの「Python初心者が3.xに手を出したらhttplib2でハマった理由」をたった一つ挙げるとすれば、「Python 3.xを使ってる開発者がほとんどいないから」という事になるのかもしれない。
結局、このエントリのタイトルの「Python初心者が3.xに手を出したらhttplib2でハマった理由」をたった一つ挙げるとすれば、「Python 3.xを使ってる開発者がほとんどいないから」という事になるのかもしれない。
0 件のコメント:
コメントを投稿