【问题标题】:python csv.read fails on second iterationpython csv.read 在第二次迭代中失败
【发布时间】:2011-11-24 23:34:50
【问题描述】:

我的代码如下所示:

for filename in files:
  with open(filename, 'rb') as csvfile:
    csvreader = csv.reader(csvfile, delimiter=';')
    values=list(csvreader)
  dosomething()

我有大约 10 个文件要处理,第一个文件没有问题。但是当 python 尝试开始处理第二个文件时,它会说

Traceback (most recent call last):
File "plot.py", line 20, in <module>
values=list(csvreader)
TypeError: 'list' object is not callable

有人知道为什么这不起作用吗?

【问题讨论】:

  • 我敢打赌在你的代码中某处有一个名为list的变量。
  • 是的,就是这样。对于列表中的列表: foo() 我认为像这样定义的变量是私有的,但后来我又在 3 小时前开始编写 python。非常感谢你们所有人,我希望我能接受超过 1 个答案:)

标签: python parsing csv


【解决方案1】:

您在某处使用了名为list 的(全局,如果问题出现在这里)变量来保存列表的实例。这是个坏主意。每次使用名称 list 时都会查找它,并且该变量会优先于实际的 list 类型找到,这是您想要的(即,为了从 csvreader 结果构造一个列表)。

【讨论】:

    【解决方案2】:

    错误消息表明列表正在您提供的代码块之外的某处重新定义。例如:

    >>> list = list()
    >>> list()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'list' object is not callable
    

    检查您是否没有将列表重新绑定到代码中其他地方的某个其他对象。

    【讨论】:

      【解决方案3】:

      由于您尚未发布实际代码,我无法确定,但您似乎在处理第一个文件的过程中分配了一个名为 list 的 var,从而隐藏了实际的内置 list 函数。

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多