Мой код работает, но иногда происходит 'ContentTypeError' object is not subscriptable на этапе цикла
Всем привет. Я делаю парсинг сайта через API. Парсинг проходит успешно. Но иногда (>иногда<) происходит ошибка во время обработки циклом. Просто как повезет. Данные парсинга после обработки циклом идут в БД. Сам цикл такой:
all_parse = []
for j in range(len(prices)):
all_parse.append([127 + j,
f'{[prices[j]["col"]["Methods"][i]["id"] for i in range(len(prices[j]["col"]["Methods"]))]}',
prices[j]["col"]["asset"], prices[j]["col"]["price"], prices[j]["column"]["Name"], prices[j]["col"]["Amount_min"],
prices[j]["col"]["Amount_max"], "http://link" + prices[j]["column"]["user"],
update_time, "BLUE"])
Как можно увидеть в цикле, весь необработанный парсинг идет в переменную 'prices'. И далее циклом обрабатывается в нужный для БД вид, уходя в список 'all_parse'. Если я делаю print(prices), то весь парсинг отображается. Но на этапе цикла >периодически< происходит ContentTypeError' object is not subscriptable. Что с этим делать?
Возможно, если это важно, далее all_parse идет в БД таким образом:
(all_parse[j]) for j in range(len(all_parse))
Полный текст ошибки:
Traceback (most recent call last):
File "C:\OSPanel\domains\project\python\run.py", line 94, in <module>
asyncio.run(main(glasses=["BUY"], assets=["dress", "boot", "cloath", "shirt", "short", "glove", "hat"],
File "C:\Users\name\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:\Users\name\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\name\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 650, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\OSPanel\domains\project\python\run.py", line 57, in main
f'{[prices[j]["col"]["Methods"][i]["id"] for i in range(len(prices[j]["col"]["Methods"]))]}',
~~~~~~~~~^^^^^^^
TypeError: 'ContentTypeError' object is not subscriptable
Сначала я думал, что ошибка в
f'{[prices[j]["col"]["Methods"][i]["id"] for i in range(len(prices[j]["col"]["Methods"]))]}'
Но если заменить это на, к примеру 'QWERTY', то та же подпись просто перескакивает на следующий этап цикла
Ответы (1 шт):
Проблема решилась. Спасибо gil9red за подсказку как убрать лишний код из цикла и CrazyElf за подсказску с isinstance. В итоге нужно было просто сделать условие в цикле:
for price in prices:
if isinstance(price, dict):