AttributeError: 'set' object has no attribute 'items'
AttributeError: 'set' object has no attribute 'items'
我是 python 的新手,一直在努力自学(这不是深入 python 的最佳方法,但为了时间的缘故,我也需要)。我导入的模块是 Tkinter 和 csv。如果您有任何问题,请告诉我,
为了简洁起见,我不会 post 我的整个代码都放在这里,但我会包括整个错误并指出错误所适用的行。下面的所有内容都在名为 MainApp 的 class 中。
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)
我把这段代码单独写出来,以确保它在将它放入程序之前能正常工作并且它运行得很好,但是当我把它放入 class 并进行更改时(我认为)我需要使代码行/变量不起作用。所以这让我相信我只是错误地纠正了一些事情。
这里是错误:
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 行指的是:
"or (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 的新手,一直在努力自学(这不是深入 python 的最佳方法,但为了时间的缘故,我也需要)。我导入的模块是 Tkinter 和 csv。如果您有任何问题,请告诉我,
为了简洁起见,我不会 post 我的整个代码都放在这里,但我会包括整个错误并指出错误所适用的行。下面的所有内容都在名为 MainApp 的 class 中。
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)
我把这段代码单独写出来,以确保它在将它放入程序之前能正常工作并且它运行得很好,但是当我把它放入 class 并进行更改时(我认为)我需要使代码行/变量不起作用。所以这让我相信我只是错误地纠正了一些事情。
这里是错误:
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 行指的是: "or (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 = {}