def recv(): global users, friends while True: # 消息主循环 data = s.recv(1024) data = data.decode() msg = data.split(':;') if len(msg) == 1: # 是用户列表消息 data = json.loads(data) # 还原为列表对象 print(data) if data["type"] == "online_list": # 在线列表消息 users = data["data"] online_list.delete(0,tkinter.END) # 清空列表框 number = ' 在线用户:'+str(len(users)) online_list.insert(tkinter.END, number) online_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff') online_list.insert(tkinter.END, '===== 群聊 =====') online_list.insert(tkinter.END, 'Robot') online_list.itemconfig(tkinter.END, fg='green') for i in range(len(users)): online_list.insert(tkinter.END, users[i]) online_list.itemconfig(tkinter.END, fg='green') elif data["type"] == "friend_list": friends = data["data"] friend_list.delete(0, tkinter.END) # 清空好友列表框 number = ' 用户好友:' + str(len(friends)) friend_list.insert(tkinter.END, number) friend_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff') for i in range(len(friends)): friend_list.insert(tkinter.END, friends[i]) friend_list.itemconfig(tkinter.END, fg='green') 运行错误:data = json.loads(data) json.decoder.JSONDecodeError: Extra data: line 1 column 40 (char 39) 请修改上述代码
时间: 2024-02-03 10:02:32 浏览: 20
根据错误提示,data 可能不是一个完整的 json 字符串,而是在结尾多了一些其他字符。建议使用 try-except 语句捕获异常,同时打印出错误信息,如下所示:
```
def recv():
global users, friends
while True:
# 消息主循环
data = s.recv(1024)
data = data.decode()
msg = data.split(':;')
if len(msg) == 1:
try:
# 是用户列表消息
data = json.loads(data)
# 还原为列表对象
print(data)
if data["type"] == "online_list":
# 在线列表消息
users = data["data"]
online_list.delete(0,tkinter.END)
# 清空列表框
number = ' 在线用户:'+str(len(users))
online_list.insert(tkinter.END, number)
online_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff')
online_list.insert(tkinter.END, '===== 群聊 =====')
online_list.insert(tkinter.END, 'Robot')
online_list.itemconfig(tkinter.END, fg='green')
for i in range(len(users)):
online_list.insert(tkinter.END, users[i])
online_list.itemconfig(tkinter.END, fg='green')
elif data["type"] == "friend_list":
friends = data["data"]
friend_list.delete(0, tkinter.END)
# 清空好友列表框
number = ' 用户好友:' + str(len(friends))
friend_list.insert(tkinter.END, number)
friend_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff')
for i in range(len(friends)):
friend_list.insert(tkinter.END, friends[i])
friend_list.itemconfig(tkinter.END, fg='green')
except json.decoder.JSONDecodeError as e:
print("Error occurred while parsing data: ", e)
```
这里使用了 json.decoder.JSONDecodeError 异常类型来捕获 json 解析时的错误,同时将错误信息打印出来。