我有一段代码从位置检索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))
当我尝试查找名字,姓氏或电子邮件的值时。我完成了这个方法。但是当我试图获得管理员价值时,我得到了一个关键的错误
请让我知道我做错了什么
答案 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
)?