Python csv.readが2回目の反復で失敗する

私のコードは次のようになります:

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

私は約10ファイルを処理したいし、最初のファイルの問題なく動作します。しかし、Pythonが2番目のファイルの処理を開始しようとすると

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

なぜこれはうまくいかないのでしょうか?

1
うん、それだった。リストのリスト:foo()私はこのように定義された変数はプライベートだと思ったが、もう一度私は3時間前にPythonをコーディングし始めた。あなたのおかげです、私は1つ以上の答えを受け入れることができたらいいなあ:)
追加された 著者 Nicolas,
あなたのコードのどこかに list という変数があります。
追加された 著者 Avaris,

3 答え

リストのインスタンスを保持するために、 list という名前の変数(ここで問題が発生している場合はグローバル)を使用しています。それは悪い考えです。 list という名前は使用されるたびに検索され、その変数は実際の list 型よりも優先されます。 csvreader の結果からのリスト)。

5
追加された

実際のコードを投稿していないので、わかりませんが、実際の組み込みリスト関数をシャドウイングして、最初のファイルの処理中にvarという名前のリストに割り当てているようです。

1
追加された

エラーメッセージは、あなたが提供したコードブロックの外のどこかでリストが再定義されていることを示唆しています。例えば:

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

コード内の他の場所にリストをリバウンドしていないことを確認してください。

1
追加された