Python-如果找不到json元素,如何继续

时间:2018-06-27 23:06:43

标签: python json try-catch

所以我一直在和Json玩耍,并进行一些比较。

所以基本上我有一个Json,其中某些元素包含在某些元素中,而有些则不包含。

我遇到的问题是脚本不断重复执行脚本,但是由于无法找到元素等异常而无法执行任何操作,例如 Price estimatedLaunchDate 将在此Json中找到

sample = {
"threads": [{
        "seoTitle": "used food",
        "other_crap": "yeet"
    },
    {
        "seoTitle": "trucks",
        "other_crap": "it's a fox!"
        "product": {
            "imageUrl": "https://imagerandom.jpg",
            "price": {
                "fullRetailPrice": 412.95
            },
            "estimatedLaunchDate": "2018-06-02T03:00:00.000",
            "publishType ": "DRAW"
        },
        {
            "seoTitle": "rockets",
            "other_crap": "i'm rocket man"
        },
        {
            "seoTitle": "helicopter",
            "other_crap": "for 007"
            "product": {
                "imageUrl": "https://imagerandom.jpg",
                "price": {
                    "fullRetailPrice": 109.95
                },
                "estimatedLaunchDate": "2018-06-19T00:00:00.000",
                "publishType": "FLOW"
            }
        }
    ]
}

如您所见,某些json元素比其他元素有一些额外的信息,这是我遇到的问题,请问如何/如何使其能够继续使用或仅添加等内容“找到” “未找到publishType” ,并且仍然继续其余json吗?

到目前为止,我已经编写了执行此操作的代码:

old_list = []

    while True:
        try:
            resp = requests.get("www.helloworld.com")
            new_list = resp.json()['threads']

            for item in new_list:

                newitemword = item['seoTitle']

                if newitemword not in old_list:
                    try:

                        print(newitemword) #item name

                        print(str(item['product']['price']['fullRetailPrice']))
                        print(item['product']['estimatedLaunchDate']) 
                        print(item['product']['publishType']) 


                        old_list.append(newitemword)



                    except Exception as e:
                        print(e)
                        print("ERROR")
                        time.sleep(5)
                        continue


            else:
                randomtime = random.randint(40, 60)
                time.sleep(randomtime)

您可以看到tryexcept方法内部有4个打印,如果这3个打印之一(fullRetailPrice,estimateLaunchDate,publishType),它将抛出异常,并且不会继续执行其余代码,这意味着它会在"seoTitle": "trucks",元素!

1 个答案:

答案 0 :(得分:1)

我不会重写您的整个示例,但是假设您在查找值时会

print(str(item['product']['price']['fullRetailPrice']))

您遵循的这些键中的一个或多个可能不存在。您可以通过执行以下操作在代码中检测到

foo = item.get('product', {}).get('price', {}).get('fullRetailPrice')
if foo:
    print(str(foo))
else:
    print('Retail price could not be found')

get的第二个参数是在找不到所需键的情况下返回的值。将其返回为空字典{}将使您继续检查行直到最后。如果找不到任何键,则最后一个get将返回None。然后,您可以检查foo是否为None并适当地打印错误消息。