Sono molto nuovo in Python e ho cercato di insegnarmi mentre andavo (non il metodo migliore in profondità in Python ma per il tempo ho bisogno anche io). I moduli che ho importato sono Tkinter e CSV. Fatemi sapere se avete domande,AttributeError: l'oggetto 'set' non ha attributo 'items'
Per brevità non invierò qui il mio intero codice ma includerò l'intero errore e indicherò la riga a cui si applica l'errore. Tutto ciò che è sotto è in una classe chiamata 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)
ho scritto questo codice separatamente fuori per assicurarsi che ha funzionato prima di metterlo nel programma e ha funzionato perfettamente, ma quando ho messo in classe e fatto le modifiche (ho pensato) avevo bisogno di fare per le linee di codice/variabili che non ha funzionato. Quindi questo mi porta a credere che sto solo correggendo qualcosa in modo errato.
Ecco l'errore:
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'
Dove linea 328 si riferisce alla linea: "o (self.key, self.val) in self.changes.items():"
Ho cambiato in giro (mi sento come) la presenza o l'assenza di "sé". per tutte le variabili ma non riesco a farlo funzionare.
EDIT: ho modificato il codice per assomigliare a questo:
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)
come per i commenti, ma ancora ottenere lo stesso errore esatto.
Bene l'errore stesso sta dicendo non v'è alcun attributo chiamato 'articoli()'. Quindi prova a rimuovere '.items()' da 'self.changes.items()' http://docs.python.org/3/library/stdtypes.html#dictionary-view-objects Inoltre, perché hai do 'self.changes = {self.key: self.val}'? Se stai solo provando a fare riferimento a un dizionario, aggiungere 'self.key: self.val' non è necessario poiché' self.changes = {} 'è sufficiente. – awbemauler
Quando togli il file .items() restituisce un valore ValueError che dice "ha bisogno di più di 0 valori per decomprimere". Proverò a lasciare il dizionario vuoto. – MTMA
Sì, perché non hai nulla nella tua chiave e valore. Hai iniziato quelle variabili con niente. – awbemauler