Python 3.0+astпонятие
ast.Nonlocal
функции и классы
Узел инструкции nonlocal: names — список имён строками.
Синтаксис
ast.Nonlocal(names)
Имена в names — простые строки, а не узлы Name, поэтому ast.walk по Name их не находит. ast.parse проверяет только синтаксис: nonlocal на уровне модуля даёт вполне корректное дерево, а ошибка «not allowed at module level» появляется лишь в compile(). То же верно для return и yield вне функции.
Примеры
import ast
tree = ast.parse('nonlocal a, b')
print(type(tree.body[0]).__name__, tree.body[0].names) # → Nonlocal ['a', 'b']
try:
compile(tree, '<ast>', 'exec')
except SyntaxError as e:
print(e.msg) # → nonlocal declaration not allowed at module level
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности