【发布时间】:2015-09-19 22:38:17
【问题描述】:
我目前正在 Python 中使用套接字和 JSON,其中我有以下代码:
class RCHandler(SocketServer.BaseRequestHandler):
def setup(self):
pass
def handle(self):
raw = self.request.recv(1024)
recv = raw.strip()
if not recv:
return
# do some logging
logging.debug("RECV: (%s)" % recv)
try:
data = json.loads(recv)
except:
logging.exception('JSON parse error: %s' % recv)
return
if recv == 'quit':
return
问题是当我发送错误的 JSON 字符串时,例如'{"method": "test"',异常好像被抓到了,但是还是得到如下回溯:
DEBUG: 20/09/2015 12:33:57 - RECV: ({"method": "test")
ERROR: 20/09/2015 12:33:57 - JSON parse error: {"method": "test"
Traceback (most recent call last):
File "./remoteControl.py", line 68, in handle
data = json.loads(recv)
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: Expecting object: line 1 column 17 (char 16)
我在这里缺少什么?如果我发现异常,我不应该得到回溯,对吗?我的服务器类扩展了 ThreadingTCPServer,如果这与它有任何关系的话。
当我运行另一个 python 脚本时:
#!/usr/bin/python
import json
import socket
d = '{"method": "test"'
try:
data = json.loads(d)
except:
print "fail"
它只打印“失败”并且没有回溯。
【问题讨论】: