Телеграмм бот. Ошибка: TypeError: 'NoneType' object is not subscriptable
Получаю ошибку:
Task exception was never retrieved future:
<Task finished name='Task-42' coro=<ads_every_minute() done, defined at C:\Users\PC\Desktop\avparser-sliv\bot.py:93> exception=TypeError("'NoneType' object is not subscriptable")>
Traceback (most recent call last): File "C:\Users\PC\Desktop\avparser-sliv\bot.py", line 103, in ads_every_minute new_ad_url = get_ad_data(ads_url)[-1]
TypeError: 'NoneType' object is not subscriptable
бот сразу же перестает работать после нее.
Обычно это происходит после часа работы, вероятнее всего ошибка может быть в этой части кода:
async def ads_every_minute(user_id):
while True:
ads_users_list = get_all_users_ads(user_id)
if len(ads_users_list) >= 1:
for ads in ads_users_list:
ads_url = str(ads).split("'")[1]
tracked_url_title = get_requested_page_title(ads_url)
old_ad = get_old_ad_from_db(user_id, tracked_url=ads_url)
old_ad_url = str(old_ad).split("'")[1]
new_ad_url = get_ad_data(ads_url)[-1]
new_ad_data = (user_id, ads_url, new_ad_url,tracked_url_title)
if new_ad_url != old_ad_url:
delete_old_data(user_id, tracked_url=ads_url)
write_url_on_db(new_ad_data)
await bot.send_message( user_id, f'{build_nice_message(ads_url)}',disable_web_page_preview=True)
else:
print('Обновлений нет ')
await asyncio.sleep(random.randint(40, 90))
Ответы (1 шт):
Ошибка не в этой функции. Ошибка содержиться в функции get_ad_data, которая при каких-то входных данных возвращает None.
Ниже вариант кода, в котором пропускаются входные данные, при которых get_ad_data возвращает пустое значение.
async def ads_every_minute(user_id):
while True:
ads_users_list = get_all_users_ads(user_id)
if len(ads_users_list) >= 1:
for ads in ads_users_list:
ads_url = str(ads).split("'")[1]
tracked_url_title = get_requested_page_title(ads_url)
old_ad = get_old_ad_from_db(user_id, tracked_url=ads_url)
old_ad_url = str(old_ad).split("'")[1]
full_new_ad_url = get_ad_data(ads_url)
# Записали полный вариант полученных данных
if full_new_ad_url:
new_ad_url = fill_new_ad_url[-1]
else:
print('get_ad_data вызывает ошибку при входных данных:', ads_url)
continue
new_ad_data = (user_id, ads_url, new_ad_url,tracked_url_title)
if new_ad_url != old_ad_url:
delete_old_data(user_id, tracked_url=ads_url)
write_url_on_db(new_ad_data)
await bot.send_message( user_id, f'{build_nice_message(ads_url)}',disable_web_page_preview=True)
else:
print('Обновлений нет ')
await asyncio.sleep(random.randint(40, 90))