Как перейти к другому l oop in python, если API не возвращает никаких данных? - PullRequest
2 голосов
/ 06 апреля 2020

У меня есть код python, который просматривает несколько местоположений и извлекает данные из API третьей части. Ниже приведен код sublocation_ids - идентификатор местоположения, поступающий из каталога.

Как видно из кода, данные преобразуются во фрейм данных и затем сохраняются в файл Excel. Текущая проблема, с которой я сталкиваюсь, заключается в том, что если API не возвращает данные для publication_timestamp для определенного местоположения, l oop останавливается и не продолжается, и я получаю ошибку, как показано под кодом.

Как мне избежать этого и перейти к другому l oop, если API не возвращает данные?

for sub in sublocation_ids:
    city_num_int = sub['id']
    city_num_str = str(city_num_int)
    city_name = sub['name']
    filter_text_new = filter_text.format(city_num_str)
    data = json.dumps({"filters": [filter_text_new], "sort_by":"created_at", "size":2})
    r = requests.post(url = api_endpoint, data = data).json()
    articles_list = r["articles"] 
    articles_list_normalized = json_normalize(articles_list)
    df = articles_list_normalized
    df['publication_timestamp'] = pd.to_datetime(df['publication_timestamp'])
    df['publication_timestamp'] = df['publication_timestamp'].apply(lambda x: x.now().strftime('%Y-%m-%d'))
    df.to_excel(writer, sheet_name = city_name)
writer.save()   

Ошибка ключа: publishing_timestamp

1 Ответ

3 голосов
/ 06 апреля 2020

Измените этот бит кода:

df = articles_list_normalized
if 'publication_timestamp' in df.columns:
    df['publication_timestamp'] = pd.to_datetime(df['publication_timestamp'])
    df['publication_timestamp'] = df['publication_timestamp'].apply(lambda x: x.now().strftime('%Y-%m-%d'))
    df.to_excel(writer, sheet_name = city_name)
else:
    continue

Если API буквально не возвращает данных, например {}, то вы можете даже выполнить проверку перед его нормализацией:

if articles_list:
    df = json_normalize(articles_list)
    # ... rest of code ...
else:
    continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...