python - 属性错误 : 'set' object has no attribute 'items'

标签 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.key,self.val) in self.changes.items():”

我改变了(我感觉)“ 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)

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

最佳答案

从最新更新的代码可以看出——

self.changes = {"MTMA",123}

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

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

self.changes = {"MTMA":123}

在您的实际代码中也执行类似的操作。

如果你想要的是一个空字典,将它定义为 -

self.changes = {}

关于python - 属性错误 : 'set' object has no attribute 'items' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32121015/

相关文章:

python - Excel CSV 转换为嵌套字典;列表推导式

python - 如何在 numpy 二维数组中存储列表?

python - 狮身人面像 : create toc entries for each method

c# - 使用自定义类列表

C++:如何在类中声明一个空的私有(private)静态 vector ?

perl - 在perl中解析树数据文件

javascript - 将 CSV 数据解析为 JS 对象以在图表中使用。 Uncaught ReferenceError : data is not defined(jsfiddle included)

python - 外部函数 : who deallocates memory?

python - 使用 Green 单元测试运行程序使测试超时

c++ - 子类是否也继承了 C++ 中的私有(private)数据成员?但是是通过父类(super class)的公共(public)方法访问的吗?