Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4fcf5c1

Browse files
authored
bpo-39158: ast.literal_eval() doesn't support empty sets (GH-17742)
1 parent 32f1443 commit 4fcf5c1

4 files changed

Lines changed: 8 additions & 0 deletions

File tree

Doc/library/ast.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,9 @@ and classes for traversing abstract syntax trees:
194194
.. versionchanged:: 3.2
195195
Now allows bytes and set literals.
196196

197+
.. versionchanged:: 3.9
198+
Now supports creating empty sets with ``'set()'``.
199+
197200

198201
.. function:: get_docstring(node, clean=True)
199202

Lib/ast.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ def _convert(node):
8383
return list(map(_convert, node.elts))
8484
elif isinstance(node, Set):
8585
return set(map(_convert, node.elts))
86+
elif (isinstance(node, Call) and isinstance(node.func, Name) and
87+
node.func.id == 'set' and node.args == node.keywords == []):
88+
return set()
8689
elif isinstance(node, Dict):
8790
return dict(zip(map(_convert, node.keys),
8891
map(_convert, node.values)))

Lib/test/test_ast.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,7 @@ def test_literal_eval(self):
891891
self.assertEqual(ast.literal_eval('(True, False, None)'), (True, False, None))
892892
self.assertEqual(ast.literal_eval('{1, 2, 3}'), {1, 2, 3})
893893
self.assertEqual(ast.literal_eval('b"hi"'), b"hi")
894+
self.assertEqual(ast.literal_eval('set()'), set())
894895
self.assertRaises(ValueError, ast.literal_eval, 'foo()')
895896
self.assertEqual(ast.literal_eval('6'), 6)
896897
self.assertEqual(ast.literal_eval('+6'), 6)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ast.literal_eval() now supports empty sets.

0 commit comments

Comments
 (0)