From f7c5003c1ccf2dc6f461aabbf2502227440a56a7 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 14 May 2013 18:38:35 +0900 Subject: [PATCH] better error with very long fields in import (#852) --- anki/importing/csvfile.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/anki/importing/csvfile.py b/anki/importing/csvfile.py index f6e651148..935198d11 100644 --- a/anki/importing/csvfile.py +++ b/anki/importing/csvfile.py @@ -2,10 +2,14 @@ # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -import codecs, csv, re +import codecs +import csv +import re + from anki.importing.noteimp import NoteImporter, ForeignNote from anki.lang import _ + class TextImporter(NoteImporter): needDelimiter = True @@ -29,21 +33,24 @@ class TextImporter(NoteImporter): reader = csv.reader(self.data, delimiter=self.delimiter, doublequote=True) else: reader = csv.reader(self.data, self.dialect, doublequote=True) - for row in reader: - row = [unicode(x, "utf-8") for x in row] - if len(row) != self.numFields: - if row: - log.append(_( - "'%(row)s' had %(num1)d fields, " - "expected %(num2)d") % { - "row": u" ".join(row), - "num1": len(row), - "num2": self.numFields, - }) - ignored += 1 - continue - note = self.noteFromFields(row) - notes.append(note) + try: + for row in reader: + row = [unicode(x, "utf-8") for x in row] + if len(row) != self.numFields: + if row: + log.append(_( + "'%(row)s' had %(num1)d fields, " + "expected %(num2)d") % { + "row": u" ".join(row), + "num1": len(row), + "num2": self.numFields, + }) + ignored += 1 + continue + note = self.noteFromFields(row) + notes.append(note) + except (csv.Error), e: + log.append(_("Aborted: %s") % str(e)) self.log = log self.ignored = ignored self.fileobj.close()