2010年9月25日土曜日

Python初心者が3.xに手を出したらhttplib2でハマった理由

Dive Into Python 3 日本語版」でお勧めされていたhttplib2モジュールを試してみたら、

  1. Python 3で追加されたhttp.client.HTTPExceptionではなく、既に存在しないhttplib.HTTPException を捕捉しようとしている箇所でNameErrorが発生する。
  2. HTTPConnectionWithTimeoutクラスのconnect()メソッドでUnboundLocalErrorが発生する。

という2つの問題が発生した。


本家サイトではそれぞれIssue 79Issue 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を使ってる開発者がほとんどいないから」という事になるのかもしれない。

0 件のコメント:

コメントを投稿