2017-08-08 1 views
0

Je reçois une erreur que je n'ai jamais reçue auparavant lorsque j'essaie d'exécuter ce code.Index enfant hors limites, arborescence d'éléments python

File "BasicEmail.py", line 96, in init_ui root[0][1].text IndexError: child index out of range Abort trap: 6

Mon code est simple,

class EmailBlast(QtWidgets.QWidget): 
    def __init__(self): 
     super().__init__() 
     self.init_ui() 

    def init_ui(self): 
     user_file = 'user_info.xml' 
     tree = ET.parse(user_file) 
     root = tree.getroot() 
     root[0][1].text 
     self.emailLabel = QtWidgets.QLabel("Email:") 
     self.emailListLabel = QtWidgets.QLabel("") 
     self.sendButton = QtWidgets.QPushButton("Save") 
     self.settingsButton = QtWidgets.QPushButton("Settings") 

     h_box = QtWidgets.QHBoxLayout() 
     h_box.addStretch() 

     v_box = QtWidgets.QVBoxLayout() 
     v_box.addWidget(self.emailLabel) 
     v_box.addWidget(self.emailListLabel) 
     v_box.addWidget(self.sendButton) 
     v_box.addWidget(self.settingsButton)   
     v_box.addLayout(h_box) 

     self.setLayout(v_box) 
     self.setWindowTitle("Email Blast") 

     self.settingsButton.clicked.connect(lambda: self.settings(self.settingsButton, "Saved"))   
     self.show() 

    def settings(self, settingsButton, string): 
     self.ui = ConfigWindow() 
     self.hide()   
     print("Settings") 

Je suis en mesure d'obtenir les balises et les attributs, aucune valeur. Les données dans le XML sont bien et il devrait y avoir un tableau, ou une liste, là pour moi de tirer.

complet fichier xml inclus:

<data> 
<email>[email protected]</email> 
<password>testpass</password> 
<smtp>gmail</smtp> 
<port>587</port> 
</data>` 
+0

vérifier le résultat de 'tree.getroot() ', avec' print (len (tree.getroot())) 'et' print (len (tree.getroot() [0])) ', il est difficile de dire ce qui ne va pas sans plus de code – PRMoureu

+0

Vous pouvez fournir le fichier .xml – eyllanesc

+0

@PRMoureu <Élément 'données' à 0x104e40f98> Je vais également fournir le xml – EwokHugz

Répondre

1

Votre modèle de données XML présente les enfants directement à l'intérieur de la racine, donc pas besoin d'accéder à un enfant imbriqué:

root = tree.getroot() 
root[0].text # returns the email 
root[1].text # returns the password 
root[2].text # returns the smtp 
root[3].text # returns the port 

Vous pouvez également utiliser la demande de nom pour autoriser des modifications dans votre modèle:

root.find('email').text