From a17e8bebfe8fa22f284168aa07a6c667deae8c2a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 29 Dec 2019 13:16:32 -0600 Subject: [PATCH 1/2] Support empty sets --- Lib/ast.py | 3 +++ Lib/test/test_ast.py | 1 + 2 files changed, 4 insertions(+) diff --git a/Lib/ast.py b/Lib/ast.py index ee3f74358ee120b..db405a6adf12bec 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -82,6 +82,9 @@ def _convert(node): return list(map(_convert, node.elts)) elif isinstance(node, Set): return set(map(_convert, node.elts)) + elif (isinstance(node, Call) and isinstance(node.func, Name) and + node.func.id == 'set' and node.args == node.keywords == []): + return set() elif isinstance(node, Dict): return dict(zip(map(_convert, node.keys), map(_convert, node.values))) diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 51a7c1af1ffe702..55b91cfa23beca6 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -891,6 +891,7 @@ def test_literal_eval(self): self.assertEqual(ast.literal_eval('(True, False, None)'), (True, False, None)) self.assertEqual(ast.literal_eval('{1, 2, 3}'), {1, 2, 3}) self.assertEqual(ast.literal_eval('b"hi"'), b"hi") + self.assertEqual(ast.literal_eval('set()'), set()) self.assertRaises(ValueError, ast.literal_eval, 'foo()') self.assertEqual(ast.literal_eval('6'), 6) self.assertEqual(ast.literal_eval('+6'), 6) From 24384feac7b0cb4381b8fe64b270ed8adf0e167c Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 29 Dec 2019 15:47:05 -0600 Subject: [PATCH 2/2] Add docs and blurb --- Doc/library/ast.rst | 3 +++ .../next/Library/2019-12-29-15-44-38.bpo-39158.cxVoOR.rst | 1 + 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2019-12-29-15-44-38.bpo-39158.cxVoOR.rst diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index baf563f5d7877e6..47544a40c49599a 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -194,6 +194,9 @@ and classes for traversing abstract syntax trees: .. versionchanged:: 3.2 Now allows bytes and set literals. + .. versionchanged:: 3.9 + Now supports creating empty sets with ``'set()'``. + .. function:: get_docstring(node, clean=True) diff --git a/Misc/NEWS.d/next/Library/2019-12-29-15-44-38.bpo-39158.cxVoOR.rst b/Misc/NEWS.d/next/Library/2019-12-29-15-44-38.bpo-39158.cxVoOR.rst new file mode 100644 index 000000000000000..c41799bebaeb9b4 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-29-15-44-38.bpo-39158.cxVoOR.rst @@ -0,0 +1 @@ +ast.literal_eval() now supports empty sets.