我有以下几点:
# returns a list of all items in ads collection
class Vault:
def __init__(self):
myDate = self.getTodayDate()
myTime = self.getTodayTime()
# used to mock collection (table) of ads
self._ads = [ {
'id': '00000000-0000-0000-0000-000000000000',
'date': myDate,
'time': myTime,
'source': 'chron.com',
'advertiser': 'itunes.apple.com',
'width': 300,
'height': 250
} ]
def get_all_ads(self):
return ( ad for ad in self._ads )
def get_all_adsn(self,n):
n = int(n)
if self._ads.__len__()<n:
return self.get_all_ads()
max = self._ads[0, n]
return ( ad for ad in max )
当n
小于ads的长度时,它正确地返回。因此get_all_ads
工作。问题是当我尝试获取特定数量的广告时。当我尝试获取特定数量的广告时,例如ads[0, n]
,然后执行相同的操作以获取其中的所有广告时,我会得到以下错误:
TypeError
TypeError: list indices must be integers, not tupleFrom:
File "/Users/tai/Desktop/FlashY/flashy/repository/mock.py", line 162, in get_all_adsn max=self._ads[0,n]
._ads
是一个列表,为什么我不能访问它?我将n
转换为int
(我使用flask/routes来调用它)。因此,如果我运行get_all_adsn(2)
,我会得到正确的结果,但是当我运行get_all_adsn(1)
,我会得到一个错误
我不明白我的错误,我正在尝试按元素拆分一个列表(数组,我像[{},{},...]
一样创建它)。为什么要说元组
你的代码
max = self._ads[0,n]
不是有效的python。在python中,对列表进行切片的语法是self._ads[0:n]
,请尝试以下方法另外,我还冒昧地清理了你代码的最后两行。实际上,python切片非常智能,如果切片超出了序列的上限(列表、元组等等),它只会返回整个序列。这意味着您可以将整个函数重写为一个简单的片段
l[1, 2]
与l[(1, 2)]
相同,这不是您想要的。您可能打算使用切片,它有不同的语法(l[1:2]
):代码中的变量
_ads
是一个列表。访问列表:在Python中没有任何意义,这就是您看到错误的原因。您可以通过在Python shell中进行尝试来确认这一点:
调用
get_all_adsn(2)
时代码工作的原因是,在本例中n
是2,它在代码中传递了以下条件:因此不执行行:
您可能需要将其更改为:
相关问题 更多 >
编程相关推荐