Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';设置';对象没有属性';项目';_Python_Class_Csv_Tkinter_Items - Fatal编程技术网

Python 属性错误:';设置';对象没有属性';项目';

Python 属性错误:';设置';对象没有属性';项目';,python,class,csv,tkinter,items,Python,Class,Csv,Tkinter,Items,我对python非常陌生,一直在努力自学(这不是深入python的最好方法,但为了时间的缘故,我也需要)。我导入的模块是Tkinter和csv。如果你有任何问题,请告诉我 为了简洁起见,我不打算在这里发布我的全部代码,但我将包含整个错误,并指出错误应用到的行。下面的所有内容都在一个名为MainApp的类中 def SubmitEdit(self): self.key="" self.val="" new_rows = [] self.changes = {self

我对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):

我已经改变了(我觉得)自我的存在与否。对于所有的变量,我只是不能让它工作

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

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 = {}

错误本身是说没有名为
items()
的属性。因此,请尝试从
self.changes.items()
中删除
.items()
。另外,为什么要执行
self.changes={self.key:self.val}
?如果您只是尝试引用字典,则不需要添加
self.key:self.val
,因为
self.changes={}
就足够了。当我去掉.items()时,它返回一个ValueError,表示“需要超过0个值才能解包”。我会尽量让字典空着。是的,因为您的密钥和值中没有任何内容。你启动这些变量时什么都没有。你能把传递给函数的内容指定为
self
?我不太清楚你的意思。(如上所述,我是一个相当业余的人),但当我不包括“自我”时,它会给我另一个错误。现在很明显。多么尴尬。。。谢谢你的帮助!这救了我的命!我会花几个小时看不到打字错误!