Google Appengine で urllib2 が「HTTPResponse instance has no attribute 'readline'」というエラー
タイトルのようなエラーに遭遇したので、それの回避した時のメモ
エラー内容
import urllib2 url = "http://www.google.com/" try: result = urllib2.urlopen(url) except urllib2.URLError, e: print e
こんな感じでフツーにurllib2を使うと下記のようなエラーになる。
File "/usr/local/Cellar/python/2.7.2/lib/python2.7/urllib2.py", line 1199, in http_open return self.do_open(httplib.HTTPConnection, req) File "/usr/local/Cellar/python/2.7.2/lib/python2.7/urllib2.py", line 1190, in do_open resp = addinfourl(fp, r.msg, req.get_full_url()) File "/Users/tell_k/Work/hogehoge/google_appengine/google/appengine/dist27/urllib.py", line 978, in __init__ addbase.__init__(self, fp) File "/Users/tell_k/Work/hogehoge/google_appengine/google/appengine/dist27/urllib.py", line 926, in __init__ self.readline = self.fp.readline AttributeError: HTTPResponse instance has no attribute 'readline'
参考
回避方法
SDKのバージョンを戻すのも面倒だったので、「google/appengine/dist27/urllib.py」を直接いじる事で暫定対処。926行目付近を下記のように修正
class addbase: """Base class for addinfo and addclosehook.""" def __init__(self, fp): self.fp = fp self.read = self.fp.read - self.readline = self.fp.readline + if hasattr(self.fp, "readline"): self.readline = self.fp.readline if hasattr(self.fp, "readlines"): self.readlines = self.fp.readlines if hasattr(self.fp, "fileno"): self.fileno = self.fp.fileno
とりあえず普通に使う分には問題なかった。
おわり