密钥错误u'True检查存储在python字典中的JSON转储中的值

时间:2014-07-24 03:53:23

标签: python json dictionary robotframework keyerror

我有一段代码从位置检索JSON转储并检查存储字典中的值。

我的JSON转储如下所示:

{
    u'response': {
        u'username': u'robo',
        u'first_name': u'robot-update',
        u'last_name': u'frmwrk-update',
        u'is_deleted': False,
        u'entity_type': u'user',
        u'admin': True,
        u'image': {
            u'complete_json': True,
            u'entity_type': u'image',
            u'original': u'/images/default-user-icon.png',
            u'icon': u'/images/default-user-icon.png'
        },
        u'title': u'update-title',
        u'email': u'robotupdate@robot.com',
        u'dept': u'update-department',
        u'subscribed_to_emails': True,
        u'notes': u'update-note',
        u'complete_json': True,
        u'id': 177,
        u'tags': [],
        u'developer': True
    }
}

我正在尝试检索键值对并将其与我的预期值进行比较。

我的代码片段如下,user_info返回我的json转储:

    def check_user_info(self, user_name, key_value, expected_value):
        logger.info("Checking to see if the - {0} is the same as the expected value       {1}...".format(field_value, expected_value))
        user_info = self.my_api.get_user_info(self.token, self.app_address, user_name)
        logger.console("json dumps------ {0}".format(user_info))
        logger.console("the check value is-- {0}".format(user_info['response'][field_value]))
        check_value = user_info['response'][field_value]
        logger.info("field value is {0}".format(user_info['response'][field_value]))
        if check_value == expected_value:
            logger.info("The test value {0} is the same as expected value  {1}".format(check_value, expected_value))

当我尝试查找名字,姓氏或电子邮件的值时。我完成了这个方法。但是当我试图获得管理员价值时,我得到了一个关键的错误

请让我知道我做错了什么

2 个答案:

答案 0 :(得分:0)

实际上,您的代码会在NameError上引发field_value,因此我认为这不是您真正的代码。现在,如果错误获取,看起来你正在尝试使用u'True'作为key_value(当然会引发KeyError)而不是expected_value

答案 1 :(得分:0)

调试的第一条规则是假设错误消息告诉你实话。在这种情况下,它告诉你keyerror u'True

这意味着代码中的某个位置相当于some_dictionary[u'True']。在您发布的代码中,没有任何内容使用文字值True作为键,因此它必须位于变量中。由于您没有发布实际错误,我必须猜测哪一行导致错误。

最有可能的错误来自此代码:user_info['response'][field_value])。这意味着field_value很可能u'True'。现在的问题是,为什么是真的吗?由于您的代码没有显示该值的来源,因此我无法回答这个问题。在设置该变量时,您将需要进行一些额外的调试。

查看变量的名称,您似乎期望变量包含,但您将其用作。也许这就是问题?也许这行代码应为user_info['response'][user_name](即:将key_value替换为user_name)?