Я пишу функцию генератора, которая рекурсивно проходит по всем дочерним узлам для данного узла астроида.
В приведенном ниже примере node
является узлом астроида functiondef
.node.getchildren()
возвращает генератор с подузлами в узле.
Моя цель - получить каждый содержащийся узел.(даже в подузле)
def recursive_walk(node):
try:
for subnode in list(node.get_children()):
# yield subnode
print(subnode)
recursive_walk(subnode)
except AttributeError:
# yield node
print(node)
except TypeError:
# yield node
print(node)
Здесь, если я закомментировал заявление о доходности.Для оператора print я получаю желаемый результат, но если я выдаю узел, я не получаю желаемый вывод.
Для воспроизведения этого: - установите astroid
import astroid
node = astroid.extract_node('''
def test_function(something): #@
"""Test function for getting subnodes"""
assign_line = "String"
ctx = len(assign_line)
if ctx > 0:
if ctx == 1:
return 1
if ctx > 10:
return "Ten"
else:
return 0
''')