web-dev-qa-db-fra.com

AttributeError: l'objet 'set' n'a pas d'attribut 'items'

Je suis très nouveau à python et j'ai essayé de m'enseigner au fur et à mesure (ce n'est pas la meilleure méthode aussi profondément dans python mais pour l'amour du temps, j'ai besoin aussi) Les modules que j'ai importés sont Tkinter et csv. Faites-moi savoir si vous avez des questions,

Par souci de concision, je ne publierai pas l'intégralité de mon code ici, mais j'inclurai toute l'erreur et indiquerai la ligne à laquelle l'erreur s'applique. Tout ce qui se trouve ci-dessous est dans une classe appelée MainApp.

def SubmitEdit(self):
    self.key=""
    self.val=""
    new_rows = []
    self.changes = {self.key:self.val}
    with open("info.csv",'rb') as f:
        reader = csv.reader(f):
        for row in reader:
            new_row = row
            for field in row:
                if field == "NAME":
                    print "groovy"
            for (self.key,self.val) in self.changes.items():
                new_row = [ x.replace(self.key,self.val) for x in new_row]
            new_rows.append(new_row)
     with open("info.csv","wb") as f:
         writer = csv.writer(f):
         writer.writerows(new_rows)

J'ai écrit ce code séparément pour m'assurer qu'il fonctionnait avant de le mettre dans le programme et qu'il fonctionnait parfaitement, mais quand je l'ai mis dans la classe et fait les changements (je pensais) je devais apporter aux lignes de code/variables qu'il n'a pas fonctionné. Cela m'amène donc à croire que je ne fais que corriger quelque chose de mal.

Voici l'erreur:

Exception in Tkinter callback
Traceback (most recent call last):
    File "C:\Python27\lib\lib-tk\Tkinter.py",line 1536, in__call__
        return self.func(*args)
    File "C:\Python27\draft.py", line 328, in SubmitEdit
        for (self.key,self,val) in self.changes:
AttributeError: 'set' object has no attribute 'items'

Où la ligne 328 fait référence à la ligne: "ou (self.key, self.val) dans self.changes.items ():"

J'ai changé (je sens) la présence ou l'absence de "moi". pour toutes les variables mais je n'arrive pas à le faire fonctionner.

EDIT: J'ai modifié le code pour ressembler à ceci:

def SubmitEdit(self):
    new_rows = []
    self.changes = {"MTMA",123}
    with open("info.csv",'rb') as f:
        reader = csv.reader(f):
        for row in reader:
            new_row = row
            for field in row:
                if field == "NAME":
                    print "groovy"
            for (key,val) in self.changes.items():
                new_row = [ x.replace(key,val) for x in new_row]
            new_rows.append(new_row)
     with open("info.csv","wb") as f:
         writer = csv.writer(f):
         writer.writerows(new_rows)

selon les commentaires, mais obtenez toujours la même erreur exacte.

13
MTMA

Comme vous pouvez le voir dans le dernier code mis à jour -

self.changes = {"MTMA",123}

Lorsque vous définissez self.changes comme ci-dessus, vous définissez en fait un ensemble, pas un dictionnaire, car vous avez utilisé ',' (virgule) au lieu de deux-points, je suis presque sûr que dans votre code réel, vous utilisez la virgule elle-même, pas les deux-points.

Pour définir un dictionnaire avec "MTMA" comme clé et 123 comme valeur, utilisez deux points entre eux, Exemple -

self.changes = {"MTMA":123}

Faites de même dans votre code actuel.

Si ce que vous voulez est un dictionnaire vide, définissez-le comme -

self.changes = {}
26
Anand S Kumar