Python JSON加载导致错误:连接被强制关闭

Python JSON加载导致错误:连接被强制关闭,python,json,python-idle,Python,Json,Python Idle,概述:我使用urllib2和json库调用python2.7的API。当我运行脚本时,如果结果计数大于20,我会收到以下错误: 错误:[Errno 10054]现有连接已被服务器强制关闭 远程主机 脚本: import json import urllib2 import webbrowser url = "http://poi.????.com:xxxx/k/search?name==smith&limit==30" response = urllib2.urlopen(url)

概述:我使用urllib2和json库调用python2.7的API。当我运行脚本时,如果结果计数大于20,我会收到以下错误:

错误:[Errno 10054]现有连接已被服务器强制关闭 远程主机

脚本

import json
import urllib2
import webbrowser

url = "http://poi.????.com:xxxx/k/search?name==smith&limit==30"

response = urllib2.urlopen(url)
webbrowser.open(url)
data = json.load(response)

count = "count = "+str(data['count'])
print count
for i in data['results']:
        name = i['name']
        print name
Traceback (most recent call last):
  File "C:\Users\xxx\userQueryService.py", line 9, in <module>
    data = json.load(response)
  File "C:\Python27\lib\json\__init__.py", line 286, in load
    return loads(fp.read(),
  File "C:\Python27\lib\socket.py", line 351, in read
    data = self._sock.recv(rbufsize)
  File "C:\Python27\lib\httplib.py", line 573, in read
    s = self.fp.read(amt)
  File "C:\Python27\lib\socket.py", line 380, in read
    data = self._sock.recv(left)
error: [Errno 10054] An existing connection was forcibly closed by the remote host
>>> data = json.load(response)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 290, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line 1 column 43303 (char 43302)
预期结果:我运行脚本,API以“200 OK”状态响应,我的webbrowser.open(url)行在我的浏览器中打开响应。我的空闲shell打印输出

问题:当我在API中使用limit参数并将其设置为20或未设置限制时,仍然会得到200 OK响应,浏览器会填充结果,但我的空闲shell会产生“connection was forcely closed”(连接被强制关闭)错误

软件:我在Windows7/8和Ubuntu14.04上试过这个。通过VPN在家和在有线网络上工作

空闲时的回溯调用

import json
import urllib2
import webbrowser

url = "http://poi.????.com:xxxx/k/search?name==smith&limit==30"

response = urllib2.urlopen(url)
webbrowser.open(url)
data = json.load(response)

count = "count = "+str(data['count'])
print count
for i in data['results']:
        name = i['name']
        print name
Traceback (most recent call last):
  File "C:\Users\xxx\userQueryService.py", line 9, in <module>
    data = json.load(response)
  File "C:\Python27\lib\json\__init__.py", line 286, in load
    return loads(fp.read(),
  File "C:\Python27\lib\socket.py", line 351, in read
    data = self._sock.recv(rbufsize)
  File "C:\Python27\lib\httplib.py", line 573, in read
    s = self.fp.read(amt)
  File "C:\Python27\lib\socket.py", line 380, in read
    data = self._sock.recv(left)
error: [Errno 10054] An existing connection was forcibly closed by the remote host
>>> data = json.load(response)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 290, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line 1 column 43303 (char 43302)
回溯(最近一次呼叫最后一次):
文件“C:\Users\xxx\userQueryService.py”,第9行,在
data=json.load(响应)
文件“C:\Python27\lib\json\\ uuuuu init\uuuuuu.py”,第286行,已加载
返回加载(fp.read(),
文件“C:\Python27\lib\socket.py”,第351行,已读
数据=self.\u sock.recv(rbufsize)
文件“C:\Python27\lib\httplib.py”,第573行,已读
s=自身fp.read(金额)
文件“C:\Python27\lib\socket.py”,第380行,已读
数据=self.\u sock.recv(左)
错误:[Errno 10054]远程主机已强制关闭现有连接
Ubuntu python shell中的回溯调用:

import json
import urllib2
import webbrowser

url = "http://poi.????.com:xxxx/k/search?name==smith&limit==30"

response = urllib2.urlopen(url)
webbrowser.open(url)
data = json.load(response)

count = "count = "+str(data['count'])
print count
for i in data['results']:
        name = i['name']
        print name
Traceback (most recent call last):
  File "C:\Users\xxx\userQueryService.py", line 9, in <module>
    data = json.load(response)
  File "C:\Python27\lib\json\__init__.py", line 286, in load
    return loads(fp.read(),
  File "C:\Python27\lib\socket.py", line 351, in read
    data = self._sock.recv(rbufsize)
  File "C:\Python27\lib\httplib.py", line 573, in read
    s = self.fp.read(amt)
  File "C:\Python27\lib\socket.py", line 380, in read
    data = self._sock.recv(left)
error: [Errno 10054] An existing connection was forcibly closed by the remote host
>>> data = json.load(response)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 290, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line 1 column 43303 (char 43302)
>data=json.load(响应)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/json/_init__.py”,第290行,装入
**千瓦)
文件“/usr/lib/python2.7/json/_init__.py”,第338行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/python2.7/json/decoder.py”,第366行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
原始解码中的文件“/usr/lib/python2.7/json/decoder.py”,第382行
obj,end=self.scan_一次(s,idx)
ValueError:从第1行第43303列(字符43302)开始的未终止字符串

我通过使用请求库而不是urllib2json解决了我的问题。我已经为那些有类似问题的人提供了代码(注意,我还提供了一个异常处理程序):


如果从命令行运行脚本而不涉及空闲,会发生什么情况?同样,只要限制小于20,它就会工作。但我没有收到相同的错误,这次我收到了-->ValueError:Unterminated string,起始于:第1行第43303列(char 43302)。您应该编辑答案以添加控制台案例的回溯。你能用一个你可以发布的公共url发布一个例子,以便有人可以尝试复制吗?3.4是否也有同样的问题?添加了回溯呼叫。该脚本在其他API上运行良好,这使得它非常混乱。起初我以为它一定是我调用的服务,但日志显示了所有请求和200状态。非常困惑。