我遇到了一个我无法理解的问题.我通过Redis(作为队列)将json数据作为字符串发送,接收器抛出以下错误:
[ERROR JSON (in queue)] - {"ip": null, "domain": "somedomain.com", "name": "Some user name", "contact_id": 12345, "signature":
"6f496a4eaba2c1ea4e371ea2c4951ad92f41ddf45ff4949ffa761b0648a22e38"} => end is out of bounds
Run Code Online (Sandbox Code Playgroud)
抛出异常的代码如下:
try:
item = json.loads(item[1])
except ValueError as e:
sys.stderr.write("[ERROR JSON (in queue)] - {1} => {0}\n".format(str(e), str(item)))
return None
Run Code Online (Sandbox Code Playgroud)
真奇怪的是,如果我打开一个python控制台并执行以下操作:
>>> import json
>>> s = '{"ip": null, "domain": "somedomain.com", "name": "Some user name", "contact_id": 12345, "signature": "6f496a4eaba2c1ea4e371ea2c4951ad92f41ddf45ff4949ffa761b0648a22e38"}'
>>> print s
Run Code Online (Sandbox Code Playgroud)
我没有问题,字符串(在Python控制台中复制/粘贴)根本没有产生任何错误,但我原来的代码是扔掉一个!
你对导致这个问题的原因有什么看法吗?
您正在加载item[1],这是字符串的第二个字符items:
>>> json.loads('"')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: end is out of bounds
Run Code Online (Sandbox Code Playgroud)
你应该写:
item = json.loads(item)
Run Code Online (Sandbox Code Playgroud)