From 569ff245a3ffb6f1ca2b084ef8242a6ba76d04f8 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Mon, 9 Mar 2015 10:43:54 +0100 Subject: [PATCH] catch csv exceptions --- .../deprecated/browser/parsers/csvparser.py | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/weboob/deprecated/browser/parsers/csvparser.py b/weboob/deprecated/browser/parsers/csvparser.py index 4407d5a9..1ac07f53 100644 --- a/weboob/deprecated/browser/parsers/csvparser.py +++ b/weboob/deprecated/browser/parsers/csvparser.py @@ -19,6 +19,8 @@ import csv + +from weboob.tools.log import getLogger from .iparser import IParser @@ -53,17 +55,23 @@ class CsvParser(IParser): def parse(self, data, encoding=None): reader = csv.reader(data, dialect=self.DIALECT, **self.FMTPARAMS) c = Csv() - for row in reader: - row = self.decode_row(row, encoding) - if c.header is None and self.HEADER: - c.header = row - else: - c.rows.append(row) - if c.header: - drow = {} - for i, cell in enumerate(row): - drow[c.header[i]] = cell - c.drows.append(drow) + try: + for row in reader: + row = self.decode_row(row, encoding) + if c.header is None and self.HEADER: + c.header = row + else: + c.rows.append(row) + if c.header: + drow = {} + for i, cell in enumerate(row): + 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 def decode_row(self, row, encoding):