[EDITED]Python Rekursion Parameter ändern NUR innerhalb wenn
Ich bin eine wirklich seltsame Fehler mit und ich kann nicht ganz meinen Kopf wickeln um ihn herum. Wie ist es möglich, dass ID immer noch 1 ist (es wird initialisiert auf 1, wenn die Rekursion beginnt) innerhalb der for-Anweisung.
def recursive_read(root, id, cursor, database):
if root.text is not None:
cursor.callproc('add_node', (id, root.text))
database.commit()
#print('Adding element to db... ')
id = id+1
for elem in root.getchildren():
recursive_read(elem, id, cursor, database)
EDIT:
Dies bildet einen perfekten Baum, aber es ist unglücklicherweise nicht, was ich will. Ich möchte diese Einrückung "verschieben", so dass Kind korrekt auf Eltern verweisen kann, und dafür muss ich ID nur erhöhen, wenn Element mit Text angetroffen wird, so bleibt das Problem bestehen.
def recursive_read(root, indent):
if root.text is not None:
print(' '*indent + '%s' % (root.text))
for elem in root.getchildren():
recursive_read(elem, indent+1)
Was sollte ich ändern, damit sich die ID ändert NUR WENN root.text nicht None?
Der von Ihnen bereitgestellte Code ändert nur den Wert von id, wenn 'root.text nicht None' ist. Wenn das nicht passiert, dann ist dieses Code-Snippet nicht der Fehler. – Olian04
Erwarten Sie, dass ID nach dem rekursiven Aufruf geändert wird? Als Parameter übergebene Integer sind unveränderlich und werden daher im Aufrufer nicht geändert. Sie sollten 'return id' und' id = recursive_read (elem, id, cursor, database) '. – cdarke
Ich wollte ID erhöhen, wenn Text nicht None ist und wenn es nicht ist, sollte es wie der angegebene Wert bleiben – xxxxx