Python 3.5+astпонятие
ast.AsyncWith
async
Узел инструкции async with: список контекстных менеджеров items и тело body. Допустим только внутри async def.
Синтаксис
ast.AsyncWith(items, body, type_comment=None)
Каждый менеджер в async with a as x, b — отдельный withitem с полями context_expr и optional_vars, а не кортеж; optional_vars равно None, если as нет. Класс отдельный от With, так что visit_With его пропустит. Как и с async for, ast.parse принимает его вне корутины, а ошибку даёт compile().
Примеры
import ast
fn = ast.parse('async def f():\n async with lock, open_db() as db:\n pass').body[0]
node = fn.body[0]
print(type(node).__name__, len(node.items)) # → AsyncWith 2
print(node.items[0].optional_vars, node.items[1].optional_vars.id) # → None db
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности