[issue19449] csv.DictWriter can't handle extra non-string fields
Roundup Robot added the comment: New changeset 6e5afeada7ca by R David Murray in branch '3.3': #19449: Handle non-string keys when generating 'fieldnames' error. http://hg.python.org/cpython/rev/6e5afeada7ca New changeset ee2c80eeca2a by R David Murray in branch 'default': Merge: #19449: Handle non-string keys when generating 'fieldnames' error. http://hg.python.org/cpython/rev/ee2c80eeca2a New changeset e52d7b173ab5 by R David Murray in branch '2.7': #19449: Handle non-string keys when generating 'fieldnames' error. http://hg.python.org/cpython/rev/e52d7b173ab5 -- nosy: +python-dev ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
R. David Murray added the comment: Thanks, Tomas and Vajrasky. I tweaked the patch slightly: Thomas's fix was better, since it doesn't incur the overhead of the repr unless an an error is detected (a micro-optimization, true, but an easy one). I also chose to only check that 'fieldnames' is mentioned in the non-variable exception text; exactly how the rest of the message text is worded is not part of the API. -- resolution: - fixed stage: - committed/rejected status: open - closed ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
Vajrasky Kok added the comment: Here is the preliminary patch. -- nosy: +vajrasky Added file: http://bugs.python.org/file32582/fix_error_message_write_fields_not_in_fieldnames.patch ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
Changes by Vajrasky Kok sky@speaklikeaking.com: -- components: +Library (Lib) versions: +Python 3.3, Python 3.4 -Python 2.6 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
New submission from Tomas Grahn: When csv.DictWriter.writerow is fed a dict with extra fieldnames (and extrasaction='raise') and any of those extra fieldnames aren't strings, a TypeError-exception is thrown. To fix the issue; in csv.py, edit the line: raise ValueError(dict contains fields not in fieldnames: + , .join(wrong_fields)) to: raise ValueError(dict contains fields not in fieldnames: + , .join(repr(wrong_field) for wrong_field in wrong_fields)) Attached is a patch that fixes the problem (works in both 2.6 and 2.7, I haven't tried anything else). Here is a simple test to demonstrate the problem: import cStringIO, csv sio=cStringIO.StringIO() writer=csv.DictWriter(sio, [foo, bar]) writer.writerow({1:hello, 2:world}) -- files: csv-patch.diff keywords: patch messages: 201727 nosy: tomas_grahn priority: normal severity: normal status: open title: csv.DictWriter can't handle extra non-string fields type: behavior versions: Python 2.6, Python 2.7 Added file: http://bugs.python.org/file32425/csv-patch.diff ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
R. David Murray added the comment: I would argue that the TypeError is correct (field names must be strings), even though the way it is generated is a bit unorthodox :) Let's see what others think. -- nosy: +r.david.murray ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
R. David Murray added the comment: Rereading my post I disagree with myself. ValueError is probably better in this context (the difference between ValueError and TypeError is a bit grey, and Python is not necessarily completely consistent about it.) -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
Tomas Grahn added the comment: If non-string field names aren't allowed then shouldn't they be caught at an earlier stage, rather then when the user feeds writerow a dict with an unexpected key? But why should the field names have to be strings in the first place? Everything else is passed through str before being written anyway... -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue19449] csv.DictWriter can't handle extra non-string fields
R. David Murray added the comment: But why should the field names have to be strings in the first place? Everything else is passed through str before being written anyway... Good point. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue19449 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com