在Python3中循环项目时出现KeyError
KeyError的问题是当我的JSON中的一个字段没有值或根本不存在时。为了解决这个问题,我将我的循环放在一个异常中,这样它就可以跳过这个错误并继续循环的其余部分。然而,这种方法的问题是,当一个字段丢失时,我无法打印其余的JSON数据,因为缺少一个或两个项目 例如:在Python3中循环项目时出现KeyError,python,json,Python,Json,KeyError的问题是当我的JSON中的一个字段没有值或根本不存在时。为了解决这个问题,我将我的循环放在一个异常中,这样它就可以跳过这个错误并继续循环的其余部分。然而,这种方法的问题是,当一个字段丢失时,我无法打印其余的JSON数据,因为缺少一个或两个项目 例如: { "data": { "name": "Bloomberg", "city": "NYC"
{
"data": {
"name": "Bloomberg",
"city": "NYC",
"country": "USA"
}
}
('name:Bloomberg', 'city:NYC', 'country:USA')
{
"data": {
"name": "Bloomberg",
"country": "USA"
}
}
情景1:
JSON格式:
{
"data": {
"name": "Bloomberg",
"city": "NYC",
"country": "USA"
}
}
('name:Bloomberg', 'city:NYC', 'country:USA')
{
"data": {
"name": "Bloomberg",
"country": "USA"
}
}
此场景1工作正常,因为所有项目及其值都可用
输出:
{
"data": {
"name": "Bloomberg",
"city": "NYC",
"country": "USA"
}
}
('name:Bloomberg', 'city:NYC', 'country:USA')
{
"data": {
"name": "Bloomberg",
"country": "USA"
}
}
情景2:
JSON格式:
{
"data": {
"name": "Bloomberg",
"city": "NYC",
"country": "USA"
}
}
('name:Bloomberg', 'city:NYC', 'country:USA')
{
"data": {
"name": "Bloomberg",
"country": "USA"
}
}
在这种情况下,异常将捕获该KeyError并跳过它。但是,我仍然需要打印出数据,而不管缺少哪一个字段。我正在寻找这样的输出:
('name:Bloomberg', 'city field not available', 'country:USA')
我在循环中使用的异常:
try :
myData = (myJSON [ 'data' ] [ 'name' ] , myJSON [ 'data' ] [ 'city' ], myJSON ['data']['country'])
print (myData)
except Error as e:
pass
您可以使用
get
方法。当请求的键在字典中不存在时,它返回None
my_json = {
"data": {
"name": "Bloomberg",
"country": "USA"
}
}
my_json_data = my_json.get('data')
if my_json_data is not None:
my_data = (my_json_data.get('name'), my_json_data.get('city'), my_json_data.get('country'))
Dicts有一个“get”方法,它不会对丢失的键引发异常。谢谢Michael。我已经试过了,但没有成功,因为它引发了AttributeError:“str”对象没有属性“get”。