Я использую Python 3.7.4 и этот блок кода (MWE):
import asyncio
async def foo(x):
await asyncio.sleep(1)
return [i for i in range(10)]
async def big_foo():
dict_of_lists = {'A': [i for i in range(10)], 'B': [i for i in range(10)]}
return {
key: [
item
for list_item in dict_of_lists[key]
for item in await foo(list_item)
]
for key in ['A', 'B']
}
Выдает ошибку:
File "filename.py", line 13
item
^
SyntaxError: asynchronous comprehension outside of an asynchronous function
Сообщение об ошибке не очень помогли, потому что это действительно внутри асинхронной функции.
Я решил проблему, определив явные циклы for
вместо понимания, как это:
async def big_foo():
dict_of_lists = {'A': [i for i in range(10)], 'B': [i for i in range(10)]}
var = {}
for key in ['A', 'B']:
var[key] = []
for list_item in dict_of_lists[key]:
for item in await foo(list_item):
var[key].append(item)
return var
Меня это беспокоит удаление внешнего словаря l oop также удаляет ошибку.
Это работает (не выполняет sh то, что мне нужно, очевидно):
async def other_foo():
dict_of_lists = {'A': [i for i in range(10)]}
return [
item
for list_item in dict_of_lists['A']
for item in await foo(list_item)
]