catch csv exceptions

This commit is contained in:
Romain Bignon 2015-03-09 10:43:54 +01:00
commit 569ff245a3

View file

@ -19,6 +19,8 @@
import csv import csv
from weboob.tools.log import getLogger
from .iparser import IParser from .iparser import IParser
@ -53,17 +55,23 @@ class CsvParser(IParser):
def parse(self, data, encoding=None): def parse(self, data, encoding=None):
reader = csv.reader(data, dialect=self.DIALECT, **self.FMTPARAMS) reader = csv.reader(data, dialect=self.DIALECT, **self.FMTPARAMS)
c = Csv() c = Csv()
for row in reader: try:
row = self.decode_row(row, encoding) for row in reader:
if c.header is None and self.HEADER: row = self.decode_row(row, encoding)
c.header = row if c.header is None and self.HEADER:
else: c.header = row
c.rows.append(row) else:
if c.header: c.rows.append(row)
drow = {} if c.header:
for i, cell in enumerate(row): drow = {}
drow[c.header[i]] = cell for i, cell in enumerate(row):
c.drows.append(drow) drow[c.header[i]] = cell
c.drows.append(drow)
except csv.Error as error:
# If there are errors in CSV, for example the file is truncated, do
# not crash as there already are lines parsed.
logger = getLogger('csv')
logger.warning('Error during parse of CSV: %s', error)
return c return c
def decode_row(self, row, encoding): def decode_row(self, row, encoding):