TypeError:'list'对象不能解释为整数

Gre*_*sus 23 python for-loop list 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)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

TypeError: 'list' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)

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

jez*_*jez 19

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

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

  • 或者`for index,item in enumerate(myList)`让你们两个,IMO更可读 (3认同)
  • 或者`for in in range(len(myList))`如果想要迭代索引而不是元素本身. (2认同)

Ben*_*nao 17

对我来说,我收到此错误是因为我需要将数组放在 paratheses 中。在这种情况下,错误有点棘手......

IE。concatenate((a, b))是对的

不是 concatenate(a, b)

希望有帮助。


Mic*_*yan 8

错误来自于此:

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

您不能传递一个range需要整数的列表。最有可能的是,您打算这样做:

 def playSound(myList):
  for list_item in myList:
Run Code Online (Sandbox Code Playgroud)

或者

 def playSound(myList):
  for i in range(len(myList)):
Run Code Online (Sandbox Code Playgroud)

或者

 def playSound(myList):
  for i, list_item in enumerate(myList):
Run Code Online (Sandbox Code Playgroud)


iCo*_*dez 6

range 期望有一个整数参数,它将根据该参数生成一系列整数:

>>> range(10)
range(0, 10)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
Run Code Online (Sandbox Code Playgroud)

此外,给它一个列表将引发一个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
>>>
Run Code Online (Sandbox Code Playgroud)

如果要访问中的项目myList,请直接在列表上循环:

for i in myList:
    ...
Run Code Online (Sandbox Code Playgroud)

演示:

>>> myList = [1, 2, 3]
>>> for i in myList:
...     print(i)
...
1
2
3
>>>
Run Code Online (Sandbox Code Playgroud)


Ósc*_*pez 5

你应该这样做:

for i in myList:
    # etc.
Run Code Online (Sandbox Code Playgroud)

即,删除该range()部分。该range()函数用于生成数字序列,它接收限制作为参数来生成范围,传递列表作为参数是行不通的。要迭代列表,只需编写如上所示的循环即可。


Sah*_*wal 5

删除range.

for i in myList
Run Code Online (Sandbox Code Playgroud)

range 接受一个整数。你想要列表中的每个元素。


小智 5

因为它是一个列表,所以不能直接将其带入范围函数,因为列表的奇异整数值丢失。

用这个

for i in range(len(myList)):

这样,我们就得到了可以很容易使用的奇异整数值