如何在try / except循环中创建条件?

问题描述 投票:0回答:2

我正在webscraping两个json文件的数据。

第一个有一些我可以收集的数据。

第二个没有所需的数据。我想要存储“NA”。

我的问题是我不知道如何在我的脚本中正确存储我的'NA'。

这是我的代码:

import requests

# this is our profile ids
profile=['kaid_896965538702696832878421','kaid_1143236333220233567674383']

# prepare the list to get data
badgechall=[]

# do this for each profile id
for kaid in profile:
    # request the api link of the profile
    data = requests.get('https://www.khanacademy.org/api/internal/user/{}/profile/widgets?lang=en&_=190424-1429-bcf153233dc9_1556201931959'.format(kaid)).json()

    # go through each json file to get the data
    for item in data:
        # try to find on each dictionary of the list the desired data or pass
        try:
            for badges in item['renderData']['badgeCountData']['counts']:
                if badges['typeLabel'] == 'Challenge Patches':
                    badgechall.append(badges['count'])
        except KeyError:
            pass

print(badgechall)

当我运行此代码时,我得到:[100]

我想得到的是:[100, 'NA']

'100'对应于第一个轮廓'kaid_896965538702696832878421''NA'对应于第二个轮廓'kaid_1143236333220233567674383'

我想有第一个和第二个链接的数据,如果没有返回'NA'。所以我们应该有一个只有2个值的列表。

我试过了:

except KeyError:
    badgechall.append('NA')
    pass

但它返回:[100, 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA']

python json python-3.x web-scraping
2个回答
1
投票

您可以定义一个函数,并从该函数返回第一个计数,或"NA"

def get_badge_count(data, badge='Challenge Patches'):
    for item in data:
        try:
            for badges in item['renderData']['badgeCountData']['counts']:
                if badges['typeLabel'] == badge:
                    return badges['count']
        except KeyError:
            pass
    return "NA"

for kaid in profile:
    data = requests.get('https://www.khanacademy.org/api/internal/user/{}/profile/widgets?lang=en&_=190424-1429-bcf153233dc9_1556201931959'.format(kaid)).json()
    badgechall.append(get_badge_count(data))

之后,badgechall[100, 'NA']。如果您想匹配另一个标记,可以将其作为参数提供,例如get_badge_count(data, 'Sun Patches')


0
投票

你的意思是你想要摆脱for循环吗?

        except KeyError:
            badgechall.append('NA')
            break
© www.soinside.com 2019 - 2024. All rights reserved.