gpt4 book ai didi

python - 为什么 urllib 会出现这个错误?

转载 作者:太空狗 更新时间:2023-10-29 18:23:33 25 4
gpt4 key购买 nike

我在使用 urllib 时遇到一个奇怪的错误:

INFO     2011-12-07 07:02:45,101 main.py:884] urlhttp://maps.googleapis.com/maps/api/geocode/json?latlng=59.3333,18.05&sensor=false
WARNING 2011-12-07 07:02:45,103 urlfetch_stub.py:428] Stripped prohibited headers from URLFetch request: ['Host']
ERROR 2011-12-07 07:02:45,210 main.py:346] HTTPResponse instance has no attribute 'readline':
Traceback (most recent call last):
File "/media/Lexar/montao/lib/webapp2/webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
File "/media/Lexar/montao/montaoproject/main.py", line 885, in get
jsondata = json.load(urllib2.urlopen(url))
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1185, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1176, in do_open
resp = addinfourl(fp, r.msg, req.get_full_url())
File "/media/Lexar/montao/google/appengine/dist27/urllib.py", line 978, in __init__
addbase.__init__(self, fp)
File "/media/Lexar/montao/google/appengine/dist27/urllib.py", line 926, in __init__
self.readline = self.fp.readline
AttributeError: HTTPResponse instance has no attribute 'readline'

曾经工作的代码是

  url = 'http://maps.googleapis.com/maps/api/geocode/json' + \
'?latlng={},{}&sensor=false'.format(entity.geopt.lat, entity.geopt.lon)
logging.info('url%s' % url)
jsondata = json.load(urllib2.urlopen(url))

你能告诉我这里有什么问题吗?我在某处读到响应对象没有“get”方法那么它过去是怎么工作的呢?我认为不同之处在于我从 SDK 1.6 升级到 1.6.1 预发布版。正在运行的代码与生成错误消息的代码之间可能存在一些其他差异。

谢谢

更新

如答案中所述,以下 urlfetch 的使用可以代替:

  url = 'http://maps.googleapis.com/maps/api/geocode/json' + \
'?latlng={},{}&sensor=false'.format(entity.geopt.lat, entity.geopt.lon)
logging.info('url%s' % url)

from google.appengine.api import urlfetch
result = urlfetch.fetch(url)
jsondata = json.loads(result.content)

最佳答案

这似乎是 SDK 的错误。我能够复制完全相同的行为。您使用 urllib2 而不是 urllib 有什么原因吗?

使用 Python2.7 和 SDK 1.6.1,我测试了以下内容:

import urllib  
url = 'http://maps.googleapis.com/maps/api/geocode/json' + \
'?latlng={},{}&sensor=false'.format(entity.geopt.lat, entity.geopt.lon)
logging.info('url%s' % url)
jsondata = json.load(urllib.urlopen(url))

它按预期工作。

如果我能确定导致文件读取错误的原因,我会跟进/提交错误。

注意:我测试了 KJuly 建议的代码,但它因同样的错误而失败。似乎 urllib2 在不应该依赖 urllib 的情况下。进一步挖掘。

编辑:由于 urlliburllib2 只是 urlfetch 的包装器,我可能还建议如下:

from google.appengine.api import urlfetch
result = urlfetch.fetch(url)
jsondata = json.loads(result.content)

第二次编辑:无论哪种情况,我们都使用 urllib2 的 (/usr/lib/python2.7/urllib2.py) 的本地版本,然后尝试与 urllib (google/appengine/dist27/urllib.py) 的 GAE 特定版本进行交互。

关于python - 为什么 urllib 会出现这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8411622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com