【问题标题】:TypeError: 'list' object cannot be interpreted as an integerTypeError:“列表”对象不能解释为整数
【发布时间】:2015-03-18 03:33:04
【问题描述】:

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

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

【问题讨论】:

  • range(myList) 基本上是一个整数。所以例如。如果 myList 包含 7 个项目,那么这意味着 {i in 7},这在这里没有意义。而是简单地使用 {for i in mylist} 遍历 myList。

标签: python list for-loop typeerror


【解决方案1】:

错误消息通常意味着准确他们所说的。因此,必须非常仔细地阅读它们。当你这样做时,你会发现这个实际上并没有像你想象的那样抱怨你的列表包含的对象类型,而是它的对象类型>是。这并不是说它希望您的列表包含整数(复数)——相反,它似乎希望您的列表是一个整数(单数)而不是任何东西的列表。而且由于您无法将列表转换为单个整数(至少,在这种情况下不是有意义的方式),您不应该尝试。

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

【讨论】:

  • for i in range(len(myList)) 如果希望迭代索引而不是元素本身。
  • for index, item in enumerate(myList) 让你们两个都知道,IMO 更易读
  • 如果使用:for index, (item1, item2) in enumerate(list1, list2),也会出现同样的错误。要更正此问题,请使用 zip(): for index, (item1, item2) in enumerate(zip(list1, list2))
  • @JavierTG 没错。在这种情况下,enumerate() 想要将您给它的第二个参数解释为“第一项的整数索引标签”,因此列表在该位置不起作用。
【解决方案2】:

对我来说,我遇到了这个错误,因为我需要将数组放在括号中。在这种情况下,错误有点棘手......

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

不是concatenate(a, b)

希望有帮助。

【讨论】:

    【解决方案3】:

    错误来自于此:

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

    您不能将列表传递给需要整数的range。很可能,您打算这样做:

     def playSound(myList):
      for list_item in myList:
    

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

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

    【讨论】:

      【解决方案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
      >>>
      

      【讨论】:

        【解决方案5】:

        删除range

        for i in myList
        

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

        【讨论】:

          【解决方案6】:

          你应该这样做:

          for i in myList:
              # etc.
          

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

          【讨论】:

            【解决方案7】:

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

            使用这个

            for i in range(len(myList)):

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

            【讨论】:

              【解决方案8】:

              playSound(),而不是

              for i in range(myList):
              

              试试

              for i in myList:
              

              这将遍历myList 的内容,我相信这就是您想要的。 range(myList) 没有任何意义。

              【讨论】:

                【解决方案9】:
                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)
                

                【讨论】:

                  【解决方案10】:

                  当我们遇到这样的错误时:
                  类型错误:st 对象不能被解释为st

                  这通常是因为我们在 for 循环中使用 X 而不是 len(X)

                  #error 
                  for i in range(df.index):
                      pass
                  
                  #currect
                  for i in range( len(df.index) ):
                      pass
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2020-10-06
                    • 2017-08-01
                    • 2021-07-30
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-12-05
                    相关资源
                    最近更新 更多