2015-08-20 57 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

相关问题