Этот код был моим синхронным кодом, использующим библиотеку запросов Python:
def request_with_error_handling(self, item_id):
browse_url = f'https://api.ebay.com/buy/browse/v1/item/v1|{item_id}|0'
while True:
try:
rq = requests.get(browse_url, headers=self.browse_headers)
break
except Exception as e:
print(f'An error has occurred while processing the request: {str(e)}')
t.sleep(1)
return rq
Если я получаю сообщение об ошибке при установлении соединения, я жду секунду и пытаюсь снова, но если все идет хорошо, я выхожу из цикла и возвращаю ответ.
Однако, когда я пытаюсь сделать это с помощью aiohttp:
async def request_with_error_handling(self, browse_url):
async with aiohttp.ClientSession() as session:
while True:
try:
async with session.get(browse_url, headers=self.browse_headers) as response:
break
except Exception as e:
print(
f'An error has occurred while processing the request: {str(e)}')
t.sleep(1)
return response
в моей среде IDE отображается красная зигзагообразная линия и сообщается следующее:
Оператор break break_stmt ::= "перерыв" break может возникать только синтаксически вложенным в цикл for или while, но не вложенным в определение функции или класса в этом цикле. Он завершает ближайший охватывающий цикл, пропуская необязательное предложение else, если оно есть в цикле. Если цикл for завершается разрывом, цель управления циклом сохраняет свое текущее значение. Когда break передает управление оператору try с предложением finally, это предложение finally выполняется перед тем, как выйти из цикла.
Как преобразовать ту же логику, что и с запросами, в код aiohttp?