Fynchi
@Fynchi
туда сюда миллионер

Почему возникает проблема с асинхронной функцией?

Асинхронная функция, а Python ругается на 12 строчку.
Выдаёт ошибку - SyntaxError: 'await' outside async function.
Сама функция асинхронная, не понимаю в чем проблема.

async def get_response(self):
    self._token = self.page.session.get("token")
    self.response = await core.get_advanced_method(self._token, self.link)
    self.screen.content.controls.pop()
		
    self.element = await build_component(self.response, self._token)
    self.main.content.controls[0].content.value = self.response[0]['header']
    self.main.content.controls[1].content = self.element

    async for r in self.element.content.controls:
        async for c in r.controls:
            c.on_click = lambda event: await self.btn_clicked(event)
		
    self.page.update()
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
c.on_click = lambda event: await self.btn_clicked(event)

Здесь создаётся лямбда-функция (не асинхронная), из которой вызывается асинхронная функция.
В этом и проблема.
Если у вас апи позволяет сюда (c.on_click) подавать асинхронную функцию, то сделайте её замыканием:
async for r in self.element.content.controls:
    async for c in r.controls:
        async def on_click(event):
            return await self.btn_clicked(event)
        c.on_click = on_click

Но это всё не нужно, можно просто подавать в вашем конрктеном случае напрямую нужную функцию:
async for r in self.element.content.controls:
    async for c in r.controls:
        c.on_click = self.btn_clicked

А если on_click требует только синхронную функцию, то так не прокатит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы