summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tablib/core.py25
1 files changed, 17 insertions, 8 deletions
diff --git a/tablib/core.py b/tablib/core.py
index 6c17bc3..c4efce3 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -246,12 +246,15 @@ class Dataset(object):
if self._formatters:
for row_i, row in enumerate(_data):
for col, callback in self._formatters:
- if col is None:
- for j, c in enumerate(row):
- _data[row_i][j] = callback(c)
- else:
- _data[row_i][col] = callback(row[col])
-
+ try:
+ if col is None:
+ for j, c in enumerate(row):
+ _data[row_i][j] = callback(c)
+ else:
+ _data[row_i][col] = callback(row[col])
+ except IndexError:
+ raise InvalidDatasetIndex
+
if self.headers:
if dicts:
@@ -501,8 +504,11 @@ class Dataset(object):
col = self.headers.index(key) # get 'key' index from each data
else:
raise KeyError
-
- self._formatters.append((col, handler))
+
+ if not col > self.width:
+ self._formatters.append((col, handler))
+ else:
+ raise InvalidDatasetIndex
return True
@@ -798,6 +804,9 @@ class InvalidDatasetType(Exception):
class InvalidDimensions(Exception):
"Invalid size"
+
+class InvalidDatasetIndex(Exception):
+ "Outside of Dataset size"
class HeadersNeeded(Exception):
"Header parameter must be given when appending a column in this Dataset."