AttributeError:' set'对象没有属性' items'

时间:2015-08-20 14:29:43

标签: python class csv tkinter items

我是python的新手,并且在我去的时候一直在努力教自己(不是这个深入python的最佳方法,但为了时间和我的需要也是如此)。我导入的模块是Tkinter和csv。如果您有任何问题,请告诉我,

为了简洁起见,我不打算在此处发布我的整个代码,但是我将包含整个错误并指出错误适用的行。下面的所有内容都在名为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):"

我已经改变了(我觉得)是否存在" self。"对于所有变量,但我无法让它发挥作用。

编辑: 我将代码更改为如下所示:

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)

根据评论,但仍然得到完全相同的错误。

1 个答案:

答案 0 :(得分:22)

从最新更新的代码中可以看出 -

self.changes = {"MTMA",123}

当您如上所述定义self.changes时,实际上是在定义一个集合,而不是字典,因为您使用','(逗号)而不是冒号,我很确定在您的实际代码中您使用逗号本身,不是冒号。

要定义一个字典,其中“MTMA”为键,123为值,请在它们之间使用冒号,示例 -

self.changes = {"MTMA":123}

同样在您的实际代码中也这样做。

如果您想要的是一个空字典,请将其定义为 -

self.changes = {}