Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3中循环项目时出现KeyError_Python_Json - Fatal编程技术网

在Python3中循环项目时出现KeyError

在Python3中循环项目时出现KeyError,python,json,Python,Json,KeyError的问题是当我的JSON中的一个字段没有值或根本不存在时。为了解决这个问题,我将我的循环放在一个异常中,这样它就可以跳过这个错误并继续循环的其余部分。然而,这种方法的问题是,当一个字段丢失时,我无法打印其余的JSON数据,因为缺少一个或两个项目 例如: { "data": { "name": "Bloomberg", "city": "NYC"

KeyError的问题是当我的JSON中的一个字段没有值或根本不存在时。为了解决这个问题,我将我的循环放在一个异常中,这样它就可以跳过这个错误并继续循环的其余部分。然而,这种方法的问题是,当一个字段丢失时,我无法打印其余的JSON数据,因为缺少一个或两个项目

例如:

{
    "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”。