2017-12-18 12 views
2

私は、CSVファイルの最後の行にヌルバイト例外をキャッチしようとしている:キャッチできないヌルバイトcsv.Error例外

def Catch(csv_filename): 
    with open(csv_filename,'r+') as File: 
     File_reader = csv.reader(File,delimiter="\t",dialect='excel-tab') 
     a = [] 
     for row in File_reader: 
      try: 
       a.append(row) 
      except csv.Error: 
       return "Error" 

Catch("/../DataLogger.csv") 

しかし_csv.Errorが発生します

Traceback (most recent call last): 
File "/../test.py", line 21, in <module> 
Catch("/../DataLogger.csv") 
File "/../test.py", line 13, in Catch 
for row in File_reader: 
    _csv.Error: line contains NULL byte 

例外が関数でキャッチされていない理由はありません。 Pythonを使用しています。ステートメントに到達するとすぐに例外が発生するため、

答えて

2

です。

a.appendラインで例外が発生することはありません。csvモジュールは、forループの繰り返しでそのジョブを実行します。

あなたは修正が自明である、ことを知っていたら:1、リストへの直接変換を使用するように誘惑することができることを

try: 
    for row in File_reader: 
     a.append(row) 
except csv.Error: 
    return "Error" 

注:例外はlist変換で行わしまうので、a = list(File_reader)をしかし、a wouldn」にトン

+0

....ありがとう。それは全く見なかった –

1
def Catch(csv_filename): 
    with open(csv_filename,'r+') as File: 
     try: 
      File_reader = csv.reader(File,delimiter="\t",dialect='excel-tab') 
      a = [] 
      for row in File_reader: 
       a.append(row) 
     except csv.Error 
      return "Error" 

Catch("/../DataLogger.csv") 

ファイルの先頭には、あなたが読むために(ただし、エラー文字列を返しているので、ここでは関係していないようだ)したい有用なデータが含まれている場合は迷惑だろうこれは、満たされます全体の解析はbにする必要がありますeを試してみてください/ catch、a.appendの代わりに。

関連する問題