]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39158: ast.literal_eval() doesn't support empty sets (GH-17742)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Fri, 3 Jan 2020 05:21:18 +0000 (22:21 -0700)
committerGitHub <noreply@github.com>
Fri, 3 Jan 2020 05:21:18 +0000 (22:21 -0700)
Doc/library/ast.rst
Lib/ast.py
Lib/test/test_ast.py
Misc/NEWS.d/next/Library/2019-12-29-15-44-38.bpo-39158.cxVoOR.rst [new file with mode: 0644]

index 190d9286effb0fa0416244552e8fc45778a207d3..c380a81bee6d2426056dde405f4f9accf7a29b6a 100644 (file)
@@ -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)
 
index ece8b139e460eeb0ea784e13ae16fa000953af94..495c0d618f12cd5a35baf892cafbba86b1f466cf 100644 (file)
@@ -83,6 +83,9 @@ def literal_eval(node_or_string):
             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)))
index 51a7c1af1ffe70299debe6b8d4e7269e317c2e81..55b91cfa23beca64650e88bfd58abc91249ff878 100644 (file)
@@ -891,6 +891,7 @@ Module(
         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)
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 (file)
index 0000000..c41799b
--- /dev/null
@@ -0,0 +1 @@
+ast.literal_eval() now supports empty sets.