From 94fe3f58d07f1ae5e9ffb10f149498b09aa12a25 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 13 Mar 2007 09:32:11 +0000 Subject: [PATCH] Patch #1635454: the csv.DictWriter class now includes the offending field names in its exception message if you try to write a record with a dictionary containing fields not in the CSV field names list. --- Lib/csv.py | 7 ++++--- Misc/NEWS | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Lib/csv.py b/Lib/csv.py index f213854783e..8c6b7401271 100644 --- a/Lib/csv.py +++ b/Lib/csv.py @@ -115,9 +115,10 @@ class DictWriter: def _dict_to_list(self, rowdict): if self.extrasaction == "raise": - for k in rowdict.keys(): - if k not in self.fieldnames: - raise ValueError, "dict contains fields not in fieldnames" + wrong_fields = [k for k in rowdict if k not in self.fieldnames] + if wrong_fields: + raise ValueError("dict contains fields not in fieldnames: " + + ", ".join(wrong_fields)) return [rowdict.get(key, self.restval) for key in self.fieldnames] def writerow(self, rowdict): diff --git a/Misc/NEWS b/Misc/NEWS index 79d242b03a7..33f6d9a09c3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -168,6 +168,10 @@ Core and builtins Library ------- +- Patch #1635454: the csv.DictWriter class now includes the offending + field names in its exception message if you try to write a record with + a dictionary containing fields not in the CSV field names list. + - Patch #1668100: urllib2 now correctly raises URLError instead of OSError if accessing a local file via the file:// protocol fails.