AttributeError:“set”对象没有属性“items”

Posted

技术标签:

【中文标题】AttributeError:“set”对象没有属性“items”【英文标题】:AttributeError: 'set' object has no attribute 'items' 【发布时间】:2015-11-14 06:13:04 【问题描述】:

我对 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) 在 self.changes.items():"

我已经改变了(我觉得)“自我”的存在与否。对于所有变量,但我无法让它工作。

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

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)

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

【问题讨论】:

嗯,错误本身是说没有名为items() 的属性。所以尝试从self.changes.items() docs.python.org/3/library/stdtypes.html#dictionary-view-objects 中删除.items() 另外,你为什么要这样做self.changes = self.key:self.val?如果您只是想引用字典,则不需要添加 self.key:self.val,因为 self.changes = 就足够了。 当我拿走 .items() 时,它会返回一个 ValueError ,上面写着“需要超过 0 个值才能解包”。我会试着把字典留空。 是的,因为您的键和值中没有任何内容。你一无所有地启动了这些变量。 你能指定传递给函数的内容为self吗? 我不完全确定你的意思。 (如上所述,我很业余),但是当我不包括“自我”时。它会给我另一个错误。 【参考方案1】:

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

self.changes = "MTMA",123

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

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

self.changes = "MTMA":123

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

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

self.changes = 

【讨论】:

这救了我的命!我会花几个小时看不到错字!

以上是关于AttributeError:“set”对象没有属性“items”的主要内容,如果未能解决你的问题,请参考以下文章

Python AttributeError - 'Category' 对象没有属性 'product_set'

AttributeError:“DatabaseWrapper”对象没有属性“set_schema_to_public”(tenat_schemas)

python-matplotlib AttributeError Axes3D 对象没有属性 set_zticks

AttributeError:模块'tensorflow'没有属性'__version __'

AttributeError: 'RDD' 对象没有属性 'show'

AttributeError:“NumpyArrayIterator”对象没有属性“类”