【问题标题】:Having a difficult time resolving "TypeError: 'list' object is not callable" issue难以解决“TypeError:'list' object is not callable”问题
【发布时间】:2018-08-21 03:42:40
【问题描述】:

错误:

Traceback(最近一次调用最后一次):文件 “/root/PycharmProjects/Capstone2/ma​​in”,第 207 行,在 对于范围内的 paramIndex(0, 4): TypeError: 'list' object is not callable

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):文件 “/root/PycharmProjects/Capstone2/ma​​in”,第 249 行,在 打印('流结束')文件“/usr/lib/python3/dist-packages/picamera/camera.py”,第 758 行,在 退出 self.close() 文件“/usr/lib/python3/dist-packages/picamera/camera.py”,第 737 行,在 关闭 self.stop_recording(splitter_port=port) 文件“/usr/lib/python3/dist-packages/picamera/camera.py”,第 1198 行,在 stop_recording encoder.close() 文件“/usr/lib/python3/dist-packages/picamera/encoders.py”,第 431 行,在 关闭 self.stop() 文件“/usr/lib/python3/dist-packages/picamera/encoders.py”,第 815 行,在 停止 super(PiVideoEncoder, self).stop() 文件“/usr/lib/python3/dist-packages/picamera/encoders.py”,第 419 行,在 停止 self._close_output() 文件“/usr/lib/python3/dist-packages/picamera/encoders.py”,第 349 行,在 _close_output mo.close_stream(输出,打开)文件“/usr/lib/python3/dist-packages/picamera/mmalobj.py”,第 371 行,在 关闭流 stream.flush() ValueError: 关闭文件的刷新

相关代码:

angle = []
distance = []
speed = []
current = []
timestamp = []
parameterList = []
parameterList.extend((angle, distance, speed, current, timestamp))                

            for paramIndex in range(0, 4): # LINE 207
                # Select Range
                range = getRange(index, paramIndex + 5)
                cell_list = sheet.range(range[0], range[1], range[2], range[3])

                cellIndex = 0

                for cell in cell_list:
                    try:
                        cell.value = parameterList[paramIndex][cellIndex]
                    except:
                        print("PI: " + str(paramIndex))
                        print("CI: " + str(cellIndex))
                        print("PL LEN: " + str(len(parameterList)))
                        print("P LEN: " + str(len(parameterList[paramIndex])))

我的想法:

这个错误让我认为 paramIndex 是一个列表而不是一个整数,但是代码在前四次迭代中执行得很好。这让我觉得我的最后一个列表(时间戳)有问题。我唯一能想象到的最后一个列表有问题的是某种索引越界问题,但是...
except 块永远不会被命中
cellIndex 达到的最大值为 30(预期)
parameterList 的长度为 5(预期)
时间戳长度为31(预期)

我被难住了。如果有人能提供一些帮助,将不胜感激。

【问题讨论】:

  • getRange 是用户定义的吗?
  • 是的。好点,我没想过要检查它,因为当我早些时候测试它时,它似乎工作正常。完整代码可以在这里看到:github.com/AdamVen/Capstone/blob/master/__main__
  • 您不能使用 range 作为变量名,因为它是内置的。当您大量引用它时,这可能会导致冲突!!

标签: python python-3.x


【解决方案1】:

paramIndex 很好,但您需要避免调用与函数同名的变量。在这种情况下,range() 是一个标准的 Python 函数,但您创建了一个名为“range”的变量。此后,如果您尝试使用范围函数,则会收到“对象不可调用”错误,因为它试图将您的范围对象用作标准范围函数。

如果您坚持要保留范围对象名称,请在定义 for 循环的地方使用 xrange() 而不是 range(),这样就不会有任何冲突。

【讨论】:

  • 事后看来这是一个如此明显的错误,但我花了大约两个小时试图找出我哪里出错了。非常感谢你的收获!你知道为什么错误只发生在循环的后续迭代中吗?
  • 大多数支持 python 的 IDE 都会强调内置变量的重新定义。它不会使您免于重新定义自己的变量或范围问题,但会阻止此问题。你应该看看 PyCharm。
  • 我实际上在使用 PyCharm!当我明天回到学校时,我会看看我是否忽略了任何下划线或做了任何事情来禁用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2020-07-13
  • 2015-05-26
  • 2019-04-01
  • 2018-03-31
  • 2021-10-22
相关资源
最近更新 更多