Access Nested Python Object返回None

时间:2018-01-15 18:38:20

标签: python

我正在努力访问下面更新对象的'from'内的嵌套'is_bot'属性:

{'message': {'caption_entities': [],
             'channel_chat_created': False,
             'chat': {'first_name': 'Rodrigo Formighieri',
                      'id': 446924384,
                      'type': 'private',
                      'username': 'rodrigoformi'},
             'date': 1516040454,
             'delete_chat_photo': False,
             'entities': [{'length': 7, 'offset': 0, 'type': 'bot_command'}],
             'from': {'first_name': 'Rodrigo Formighieri',
                      'id': 446924384,
                      'is_bot': False,
                      'language_code': 'pt-BR',
                      'username': 'rodrigoformi'},
             'group_chat_created': False,
             'message_id': 145,
             'new_chat_member': None,
             'new_chat_members': [],
             'new_chat_photo': [],
             'photo': [],
             'supergroup_chat_created': False,
             'text': '/invite'},
 'update_id': 241263441}

我的尝试:

   update.get('message',{}).get('from',{}).is_bot

此向上返回 AttributeError:'消息'对象没有属性'get'

   update["message"]["from"]["is_bot"]

这最后一次返回 TypeError:'NoneType'对象不可订阅

不知道该怎么办。有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

    d = {'message': {'caption_entities': [],
             'channel_chat_created': False,
             'chat': {'first_name': 'Rodrigo Formighieri',
                      'id': 446924384,
                      'type': 'private',
                      'username': 'rodrigoformi'},
             'date': 1516040454,
             'delete_chat_photo': False,
             'entities': [{'length': 7, 'offset': 0, 'type': 'bot_command'}],
             'from': {'first_name': 'Rodrigo Formighieri',
                      'id': 446924384,
                      'is_bot': False,
                      'language_code': 'pt-BR',
                      'username': 'rodrigoformi'},
             'group_chat_created': False,
             'message_id': 145,
             'new_chat_member': None,
             'new_chat_members': [],
             'new_chat_photo': [],
             'photo': [],
             'supergroup_chat_created': False,
             'text': '/invite'},
 'update_id': 241263441}

is_bot = d.get('message').get('from').get('is_bot')

print (is_bot) # False

答案 1 :(得分:1)

当我或我的学生努力获得深层嵌套的价值时,我经常会通过它来确保我能够获得,看到我的期望。正如几位评论者所指出的那样,你的第二个版本工作得很好,所以原始代码中必须有一些我们看不到的细微差别。这是您关注的关键步骤:

Task.Delay(1000)

答案 2 :(得分:1)

解决:

update = ast.literal_eval(str(update))
update["message"]["from"]["is_bot"] #false

必须转换演员字符串,然后转换为ast.literal_eval这个该死的更新对象。