diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index 9bf374f4256..43c9add1428 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -119,12 +119,15 @@ and classes for traversing abstract syntax trees: Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following - Python literal structures: strings, numbers, tuples, lists, dicts, booleans, - and ``None``. + Python literal structures: strings, numbers, tuples, lists, dicts, sets, + booleans, and ``None``. This can be used for safely evaluating strings containing Python expressions from untrusted sources without the need to parse the values oneself. + .. versionchanged:: 3.2 + Now allows set literals. + .. function:: get_docstring(node, clean=True) diff --git a/Lib/ast.py b/Lib/ast.py index 0b8baf752e0..092f07790fe 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -58,6 +58,8 @@ def literal_eval(node_or_string): return tuple(map(_convert, node.elts)) elif isinstance(node, List): return list(map(_convert, node.elts)) + elif isinstance(node, Set): + return set(map(_convert, node.elts)) elif isinstance(node, Dict): return dict((_convert(k), _convert(v)) for k, v in zip(node.keys, node.values)) diff --git a/Misc/NEWS b/Misc/NEWS index b72e78a07e2..dbfc4c5d68f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -470,7 +470,9 @@ C-API Library ------- -- Issue #9164: Ensure that sysconfig handles duplicate -arch flags in CFLAGS +- ``ast.literal_eval()`` now allows set literals. + +- Issue #9164: Ensure that sysconfig handles duplicate -arch flags in CFLAGS. - Issue #7646: The fnmatch pattern cache no longer grows without bound.