Python通过字典与元组迭代

时间:2016-11-17 22:58:25

标签: python dictionary tuples

我正在设计一个系统,它涉及使用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
>>> 

2 个答案:

答案 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的参数,因此您肯定对此处的某些内容感到困惑。)