Проблемы с добавлением дополнительного узла If к существующему if elif else в Libcst
Я новичок в LibCST. Я пишу инструмент, который модифицирует код. Я хочу добавить elif (orelse=If) к существующему узлу If elif else. Простой пример:
# before
if data == "a":
execute_a(data)
elif data == "b":
execute_b(data)
else:
raise RuntimeError("switch not recognized")
#after
if data == "a":
execute_a(data)
elif data == "inserted":
execute_inserted(data)
elif data == "b":
execute_b(data)
else:
raise RuntimeError("switch not recognized")
Мой код выглядит так:
def leave_Try(self, node: cst.Try, updated_node: cst.Try):
# we now have enough information to make the insertion
if self.in_dispatcher:
self.in_dispatcher = False
# first let's generate a new if
new_if_str = build_command_str("New_Intent", "New_command")
new_if = cst.parse_module(new_if_str).code
#new_if is a module not an if, we may need to modify it.
# now lets make last_if point to the new
self.last_if.orelse = new_if
#and the new_ifs orelse point to the else
new_if.orelse = self.else_if
# I am not sure what to call with the with_changes()
return node
когда я выполняю код, я получаю:
Exception: Expected a node of type CSTNode or a RemovalSentinel, but got a return value of NoneType
Я не уверен, что удивлен, потому что я не обновляюсь должным образом. Я считаю, что блок Try - неправильное место. Я что-то делаю неправильно. Буду признателен за любые идеи.
Спасибо, Андрей