我正在努力访问下面更新对象的'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'对象不可订阅
不知道该怎么办。有什么帮助吗?
答案 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这个该死的更新对象。