mirror of
https://github.com/python/cpython.git
synced 2025-12-04 16:43:27 +00:00
Merge: #19449: Handle non-string keys when generating 'fieldnames' error.
This commit is contained in:
commit
5160da1afc
3 changed files with 16 additions and 1 deletions
|
|
@ -146,7 +146,7 @@ class DictWriter:
|
||||||
wrong_fields = [k for k in rowdict if k not in self.fieldnames]
|
wrong_fields = [k for k in rowdict if k not in self.fieldnames]
|
||||||
if wrong_fields:
|
if wrong_fields:
|
||||||
raise ValueError("dict contains fields not in fieldnames: "
|
raise ValueError("dict contains fields not in fieldnames: "
|
||||||
+ ", ".join(wrong_fields))
|
+ ", ".join([repr(x) for x in wrong_fields]))
|
||||||
return [rowdict.get(key, self.restval) for key in self.fieldnames]
|
return [rowdict.get(key, self.restval) for key in self.fieldnames]
|
||||||
|
|
||||||
def writerow(self, rowdict):
|
def writerow(self, rowdict):
|
||||||
|
|
|
||||||
|
|
@ -579,6 +579,18 @@ class TestDictFields(unittest.TestCase):
|
||||||
fileobj = StringIO()
|
fileobj = StringIO()
|
||||||
self.assertRaises(TypeError, csv.DictWriter, fileobj)
|
self.assertRaises(TypeError, csv.DictWriter, fileobj)
|
||||||
|
|
||||||
|
def test_write_fields_not_in_fieldnames(self):
|
||||||
|
with TemporaryFile("w+", newline='') as fileobj:
|
||||||
|
writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"])
|
||||||
|
# Of special note is the non-string key (issue 19449)
|
||||||
|
with self.assertRaises(ValueError) as cx:
|
||||||
|
writer.writerow({"f4": 10, "f2": "spam", 1: "abc"})
|
||||||
|
exception = str(cx.exception)
|
||||||
|
self.assertIn("fieldnames", exception)
|
||||||
|
self.assertIn("'f4'", exception)
|
||||||
|
self.assertNotIn("'f2'", exception)
|
||||||
|
self.assertIn("1", exception)
|
||||||
|
|
||||||
def test_read_dict_fields(self):
|
def test_read_dict_fields(self):
|
||||||
with TemporaryFile("w+") as fileobj:
|
with TemporaryFile("w+") as fileobj:
|
||||||
fileobj.write("1,2,abc\r\n")
|
fileobj.write("1,2,abc\r\n")
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #19449: in csv's writerow, handle non-string keys when generating the
|
||||||
|
error message that certain keys are not in the 'fieldnames' list.
|
||||||
|
|
||||||
- Issue #8402: Added the escape() function to the glob module.
|
- Issue #8402: Added the escape() function to the glob module.
|
||||||
|
|
||||||
- Issue #17618: Add Base85 and Ascii85 encoding/decoding to the base64 module.
|
- Issue #17618: Add Base85 and Ascii85 encoding/decoding to the base64 module.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue