TypeError:' list' object不能解释为整数

时间:2015-01-20 01:24:27

标签: python list for-loop typeerror

playSound函数正在获取整数列表,并将为每个不同的数字播放声音。因此,如果列表中的某个数字为1,则1会发出指定的声音。

def userNum(iterations):
  myList = []
  for i in range(iterations):
    a = int(input("Enter a number for sound: "))
    myList.append(a)
    return myList
  print(myList)

def playSound(myList):
  for i in range(myList):
    if i == 1:
      winsound.PlaySound("SystemExit", winsound.SND_ALIAS)

我收到此错误:

TypeError: 'list' object cannot be interpreted as an integer

我尝试了几种方法将列表转换为整数。我不太确定我需要改变什么。我确信有一种更有效的方法可以做到这一点。任何帮助将非常感谢。

9 个答案:

答案 0 :(得分:14)

错误消息通常意味着正确他们所说的内容。所以必须仔细阅读。当你这样做时,你会发现这个实际上并没有像你似乎所假设的那样抱怨你的列表包含什么类型的对象,而是关于它是什么类型的对象的即可。它并不是说它希望你的列表包含整数(复数) - 而且,它似乎希望你的列表是一个整数(单数)而不是任何列表。而且,由于您无法将列表转换为单个整数(至少在这种情况下不是有意义的方式),您不应该尝试。

所以问题是:为什么解释器似乎想要将您的列表解释为整数?答案是您将列表作为输入参数传递给range,它需要一个整数。不要这样做。请改为for i in myList

答案 1 :(得分:4)

range期待一个整数参数,从中可以构建一系列整数:

>>> range(10)
range(0, 10)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

此外,给它一个列表会引发TypeError,因为range将不知道如何处理它:

>>> range([1, 2, 3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object cannot be interpreted as an integer
>>>

如果您想访问myList中的项目,请直接遍历列表:

for i in myList:
    ...

演示:

>>> myList = [1, 2, 3]
>>> for i in myList:
...     print(i)
...
1
2
3
>>>

答案 2 :(得分:2)

你应该这样做:

for i in myList:
    # etc.

即,删除range()部分。 range()函数用于生成一系列数字,并且它接收生成范围的限制作为参数,它不会将列表作为参数传递。对于迭代列表,只需编写如上所示的循环。

答案 3 :(得分:2)

错误来自:

def playSound(myList):
  for i in range(myList): # <= myList is a list, not an integer

您无法将列表传递给需要整数的range。最有可能的意思是:

 def playSound(myList):
  for list_item in myList:

OR

 def playSound(myList):
  for i in range(len(myList)):

OR

 def playSound(myList):
  for i, list_item in enumerate(myList):

答案 4 :(得分:2)

删除range

for i in myList

范围采用整数。你想要列表中的每个元素。

答案 5 :(得分:1)

playSound()中,而不是

for i in range(myList):

for i in myList:

这会迭代myList的内容,我相信这就是你想要的。 range(myList)没有任何意义。

答案 6 :(得分:1)

def userNum(iterations):
    myList = []
    for i in range(iterations):
        a = int(input("Enter a number for sound: "))
        myList.append(a)
    print(myList) # print before return
    return myList # return outside of loop

def playSound(myList):
    for i in range(len(myList)): # range takes int not list
        if i == 1:
            winsound.PlaySound("SystemExit", winsound.SND_ALIAS)

答案 7 :(得分:1)

对我来说,我遇到了这个错误,因为我需要将数组置于寄生状态。在这种情况下,错误有点棘手...

即。 concatenate((a, b))是正确的

不是concatenate(a, b)

希望可以帮助别人的笑声

答案 8 :(得分:0)

由于它是一个列表,由于缺少列表的奇异整数值,因此无法直接将其带入范围函数。

使用此

for i in range(len(myList)):

这样,我们得到了易于使用的奇异整数值