catch csv exceptions
This commit is contained in:
parent
2afd27b4a4
commit
569ff245a3
1 changed files with 19 additions and 11 deletions
|
|
@ -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):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue