New submission from Matthias Bussonnier:
The argparse Namespace can be missleading in case where the args names are not
valid identifiers, eg thinks like a closing bracket:
In [5]: Namespace(a=1, **{')':3})
Out[5]: Namespace()=3, a=1)
more funny:
In [3]: Namespace(a=1, **{s:3})
Out[3]: Namespace(a=1, b=2), Namespace(c=3)
for `s = 'b=2), Namespace(c'`
With this patch the args that are not valid identifiers are shown in **
unpacked-dict, which has the side effect of almost always having
repr(eval(repr(obj)))== repr(obj). I'm sure we can find counter example with
quotes and triple-quoted string... but anyway.
with this patch (indentation mine for easy comparison):
>>> from argparse import Namespace
>>> Namespace(a=1, **{')': 3})
Namespace(a=1, **{')': 3})
Which is I think what most user would expect.
Test passes locally (except SSL cert, network thingies, curses and
threaded_lru_cache) which look unrelated and is most likely due to my machine.
----------
components: Library (Lib)
files: improve-namespace-repr.patch
keywords: patch
messages: 244655
nosy: mbussonn
priority: normal
severity: normal
status: open
title: improve argparse.Namespace __repr__ for invalid identifiers.
type: enhancement
versions: Python 3.6
Added file: http://bugs.python.org/file39593/improve-namespace-repr.patch
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue24360>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com