У вас возникли сложности из-за асинхронной работы?

Как исправить ошибку "SyntaxError: 'await' outside async function", возникающую в асинхронной функции на 12 строке кода в Python?
  • 13 мая 2024 г. 13:10
Ответы на вопрос 2
Да, зачастую возникают сложности из-за асинхронной работы, особенно при использовании ключевых слов вроде await и async.

Ошибка "SyntaxError: 'await' outside async function" возникает потому, что ключевое слово await должно использоваться только в асинхронных функциях. 

Для исправления этой ошибки, убедитесь, что вы определили вашу функцию как асинхронную, добавив ключевое слово async перед определением функции. Например:

```python
async def my_function():
    result = await some_async_function()
```

Таким образом, ваша асинхронная функция будет корректно работать с оператором await. Важно помнить, что использование ключевых слов async и await требует особого внимания к структуре и логике вашего кода.
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 требует только синхронную функцию, то так не прокатит.
Похожие вопросы