我正在设计一个系统,它涉及使用iter函数迭代预制的非python标准字典。我试图迭代元组但继续得到这个愚蠢的错误。此外,这个错误只发生了一半的时间,因为有点翻转功能与输入混淆
TypeError: 'tuple' object cannot be interpreted as an integer
可能很容易解决,有人能发现吗?
Heres相关代码:
在我的主程序中:
for tup in crusherdict.CrusherDict(db2, fields[0]):
log.write("VOTE\t{}\t{}\n".format(tup[0][0], tup[0][1]))
放入字典给我一个错误:
def __iter__(self):
for i in range(self.__len__()):
yield self.db.fetch(entryName(self.name,i))
Heres db.fetch:
def fetch(self,key):
return self.cache[key]
并且entryName:
def entryName(dict, str):
return (dict, "E", str)
Full BackTrace:
in <module>
if commands[line[0]](db, tempDict, logFile, line):
in cast
return inq(db, tempDict, logFile, ("INQ", tempDict["voterID"]))
line 100, in inq
for tup in crusherdict.CrusherDict(db3, fields[0]):
crusherdict.py", line 91, in __iter__
for i in range(self.__len__()):
TypeError: 'tuple' object cannot be interpreted as an integer
>>>
答案 0 :(得分:0)
回溯表示错误发生在:
for i in range(self.__len__()):
我们知道range
需要一个整数,所以这是有希望的,事实上我们可以在Python 3中复制错误消息:
>>> range((1,2))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'tuple' object cannot be interpreted as an integer
因此__len__
不会返回一个整数。
答案 1 :(得分:0)
您的函数entryName()
返回三个元素的元组。 fetch
使用此元组作为缓存的索引。因为我们必须从你提供的位中猜测,我猜你的缓存是一个普通列表,需要一个整数索引,而不是一个元组。 (此外,您正在将int
传递给您命名为str
的参数,因此您肯定对此处的某些内容感到困惑。)