все Python 3astпонятие
ast.If
управление потоком
Узел инструкции if: test — условие, body — список инструкций ветки, orelse — список инструкций else (или вложенный If для elif).
Синтаксис
ast.If(test, body, orelse)
Узла Elif нет: 'if a: … elif b: … else: …' даёт If, у которого orelse — список из одного If с собственным orelse. Глубина вложенности в дереве поэтому растёт с каждым elif, и подсчёт ветвей — рекурсия по orelse. Пустой orelse — пустой список, а не None. Выражение 'a if c else b' — другой узел, IfExp.
Примеры
import ast
src = 'if a:\n x = 1\nelif b:\n x = 2\nelse:\n x = 3'
node = ast.parse(src).body[0]
print(type(node).__name__, node.test.id) # → If a
inner = node.orelse[0]
print(type(inner).__name__, inner.test.id, len(inner.orelse)) # → If b 1
print(ast.parse('if a: pass').body[0].orelse) # → []
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности