Rustom Mody <rustompm...@gmail.com> writes: > On Saturday, September 16, 2017 at 2:04:39 AM UTC+5:30, jlad...@itu.edu wrote:
> Yeah… I used to think thus > But literal_eval has excessive crud in its error messages: > >>>> from ast import literal_eval > >>>> literal_eval("{'x':1}") > {'x': 1} > > Ok… > >>>> literal_eval("{x:1}") > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "/usr/lib/python2.7/ast.py", line 80, in literal_eval > return _convert(node_or_string) > File "/usr/lib/python2.7/ast.py", line 63, in _convert > in zip(node.keys, node.values)) > File "/usr/lib/python2.7/ast.py", line 62, in <genexpr> > return dict((_convert(k), _convert(v)) for k, v > File "/usr/lib/python2.7/ast.py", line 79, in _convert > raise ValueError('malformed string') > ValueError: malformed string > You can catch the exception and print a nice error message: from ast import literal_eval def literal(s): try: return literal_eval('{'+s+'}') except Exception as e: print "%s: %s" % (type(e).__name__, ', '.join(e.args)) >>> literal("'x':1") {'x': 1} >>> literal("x:1") ValueError: malformed string But in non-interactive use you probably want to propagate the exception. -- Piet van Oostrum <pie...@vanoostrum.org> WWW: http://piet.vanoostrum.org/ PGP key: [8DAE142BE17999C4] -- https://mail.python.org/mailman/listinfo/python-list