-4

我有一段代码可以从某个位置检索 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))

当我尝试查找名字、姓氏或电子邮件的值时。我通过方法。但是当我尝试获取管理值时,我得到一个 keyerror u'True

请让我知道我做错了什么

4

2 回答 2

0

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

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

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

查看变量的名称,您似乎希望该变量包含一个value,但您将它用作key。也许这就是问题所在?也许那行代码应该是user_info['response'][user_name](即:替换key_valueuser_name)?

于 2014-07-24T11:12:05.477 回答
0

实际上,您的代码引发了NameErroron field_value,因此我认为这不是您的真实代码。现在鉴于得到的错误,看起来您正在尝试使用u'True'as key_value(当然会引发 a KeyError)而不是expected_value.

于 2014-07-24T07:23:49.833 回答