使用json.loads时,我似乎无法捕获异常,即使我特意将其调出。当我试图用很多客户端连接快速地发送数据来强调我的服务器时,我基本上看到了这一点。请参阅下面的错误:
(我已在错误代码中用X替换了我的IP地址)
EX:从第1行第49列开始的未终止字符串(字符48)数据: '{“ap-hdop”:0.55,“rtcmin”:“38”,“ap-latdec”:3.134,“a”错误:未捕获 python异常,关闭通道 (:未终止的字符串 从第1行第49列开始(char 48) [//faraday_server_handler.py|collect_incoming_data|34] [/usr/lib/python2.7/json/init.py|loads|338] [/usr/lib/python2.7/json/decoder.py|decode|366] [/usr/lib/python2.7/json/decoder.py|raw_decode|382])
我理解这个代码失败了,因为我只是错过了一行的双引号:
'{ “AP-HDOP”:0.55, “rtcmin”: “38”, “AP-latdec”:3.134,“一个'
这条线通常要长一些,以便“a ....应该继续前进并完成它的引用。
这是我的相关代码:
def collect_incoming_data(self, data):
"""Read an incoming message from the client, place JSON message data into buffer"""
#self.logger.debug('collect_fing_data() -> (%d bytes)\n"""%s"""', len(data), data)
try:
loaded_data = json.loads(data)
except ValueError, ex:
self.handle_error()
type,value,traceback = sys.exc_info()
print type
#print "Collect Incoming Data: " . time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())
print "EX: ", ex
print "Data: ",repr(data)
有什么想法吗?我搜索了互联网,看看我是否能找到这个问题,但我似乎正在设置捕获异常,其他所有负载此问题的人似乎都建议这样做。
2016年3月1日编辑 - 晚上
注释掉我的异常handle_error()让我看到更多的错误:
except ValueError, ex:
self.handle_error()
type,value,traceback = sys.exc_info()
print type
#print "Collect Incoming Data: " . time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())
print "EX: ", ex
print "Data: ",repr(data)
以下是我的新错误,我已经注释掉了个人数据。很明显,我现在真正拥有的问题实际上是未终止的字符串
EX:从以下位置开始的未终止字符串: 第1行第49栏(字符48)数据: '{“ap-hdop”:0.55,“rtcmin”:“31”,“ap-latdec”:XX.XXX,“a'EX:没有JSON对象可以被解码数据: “P-latdeg “:34,” ADC6 “:2006年,” ADC7 “:2007年,” ADC4 “:2004年,” ADC5 “:2005年,” ADC2 “:2002年,” ADC3 “:2003年,” ADC0" :2000年, “ADC1”:2001, “GPIO-0”:30, “GPIO-1”:50, “GPIO-2”:70, “速度”:5.0 “ADC8”:2008, “rtcday”: “01”, “longdeg”:118, “longdec”:XX.XXX, “高度”:31.0, “AP-速度”:0.0, “AP-PDOP”:0.77, “LAT-DIR”: “N”,“长-DIR “:” W “ ”HDOP“:0.01, ”AP-RF“:0, ”ALT-单位“: ”M“, ”rtcdow“: ”2“, ”呼号“: ”XXXXX“,” AP-呼号“:” XXXXX “ ”ID“:1, ”AP-ID“:1, ”rtcyear“: ”2016“, ”rtcmon“: ”03“, ”AP-VDOP“:0.66,” AP-LAT-DIR “:” N”, “VDOP”:0.02, “rtchour”: “22”, “latdec”:XX.XXX, “latdeg”:34, “AP-longdeg”:118, “AP-longdec”:XX。 XXX, “rtcsec”: “15”, “AP-高度”:86.0, “AP-长-DIR”: “W”, “PDOP”:0.01, “AP-ALT-单位”: “M”,“法拉第-port“:0}”
答案 0 :(得分:0)
好的,我的原始问题得到了解答,“为什么我没有捕获ValueError异常,即使我提供代码来执行此操作?”
@tadhg McDonald-jensen对于删除我对handle_error()的调用的评论是正确的。
我还有其他一些问题,但它们是一个不同的问题。谢谢!