【问题标题】:How to fetch values from dict如何从字典中获取值
【发布时间】:2020-02-10 16:05:43
【问题描述】:

我正在实现一个带有服务器推送功能的聊天客户端 gui。将发送的消息如下所示:

yourMessage = {'name': 'David', 'text': 'hello world'}

我通过调用 streamHandler

收到服务器推送
def streamHandler(incomingData):
    if incomingData["event"] == "put":
        if incomingData["path"] == "/":
            if incomingData["data"] != None:
                for key in incomingData["data"]:
                    message = incomingData["data"][key]
                    handleMessage(message)
        else:
            message = incomingData["data"]
            handleMessage(message)

然后我有函数 handleMessage 应该检索名称和文本的值:

def handleMessage(message):
    for key in message.values():
        printToMessages(key)

但现在我得到了这个错误:'str' object has no attribute 'values' 我尝试向 dict 发送消息但没有成功,有什么想法吗?

【问题讨论】:

  • 正如错误所说,message 是一个字符串,而不是字典。您是如何尝试“向 dict 发送消息”的?
  • 消息似乎是一个字符串化的字典?在这种情况下,您可以 from ast import literal_eval as le 和 le(message) 从字符串中恢复字典。
  • 我试过这样做: message: Dict(str, str) 但它说它需要一个参数而不是两个。然后我尝试了一个论点,但这也不起作用......@JohnGordon
  • message 是一个字符串。调用 dict() 不会神奇地解决您的问题。
  • message(即incomingData["data"])是什么样的?您可以在handleMessage(message) 之前执行print(message),以便在错误消息之前看到其中的数据吗?

标签: python server-push


【解决方案1】:

也许message 参数是一个json 字符串。

如果是这样,您可以:

import json

def handleMessage(text):
    message = json.loads(text)
    for key in message.values():
        printToMessages(key)

【讨论】:

  • 我试过这个,但是我得到了这个错误:TypeError: JSON object must be str, bytes or bytearray, not dict
  • 好吧,您的 text 变量是 dict 或 str。不可能两者兼而有之。如果现在看起来是dict,那你就不需要我修改了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多