2015-08-20 53 views
6

我很新的蟒蛇,並一直在努力,因爲我去(不是最好的方法,這種深入到蟒蛇,但時間的緣故,我需要太)自學。我輸入的模塊是Tkinter和csv。讓我知道你是否有任何問題,AttributeError的:「設置」對象有沒有屬性「項目」

爲了簡潔起見,我不打算在這裏發佈我的整個代碼,但我會包括整個錯誤並指出錯誤適用的行。下面的所有內容都在名爲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) 

我寫了這個代碼進行分開,以確保它把它在計劃工作過它完美地工作,但是當我把它放在類和所做的更改(我認爲)我需要作出代碼/變量行不起作用。所以這讓我相信我只是錯誤地糾正了一些事情。

以下是錯誤:

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' 

當線328指的是行: 「在self.changes.items或(self.key,self.val)():」

我改變了(我感覺)存在或不存在「自我」。對於所有的變量,但我不能讓它工作。

編輯: 我改變了代碼如下所示:

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) 

按照該意見,但仍然得到確切同樣的錯誤。

+0

井本身是說有()稱爲'項目沒有屬性'的錯誤。因此,嘗試從'self.changes.items刪除'.items()'()'http://docs.python.org/3/library/stdtypes.html#dictionary-view-objects 此外,你爲什麼要做'self.changes = {self.key:self.val}'?如果你只是想引用一個字典,添加'self.key:self.val'就沒有必要,因爲'self.changes = {}'就足夠了。 – awbemauler

+0

當我拿走.items()時,它返回一個ValueError,它表示「需要多個值來解包」。我會嘗試將字典留空。 – MTMA

+0

是的,因爲你的鑰匙和價值沒有任何東西。你什麼也沒有發起這些變量。 – awbemauler

回答

12

你可以從最新的更新的代碼中看到 -

self.changes = {"MTMA",123} 

當你定義如上self.changes,你實際上是定義了一組,而不是一本字典,因爲你用「」(逗號)而不是冒號,我很確定你的實際代碼中你使用的是逗號本身,而不是冒號。

要定義字典,「MTMA」作爲關鍵和123值,它們之間用冒號,示例 -

self.changes = {"MTMA":123} 

在實際代碼同樣做的一樣好。

如果你想要的是一個空的字典,把它定義爲 -

self.changes = {} 
+0

Ahhhhh。現在很明顯。多麼尷尬...... 謝謝你的幫助! – MTMA

相關問題