mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
bpo-39158: ast.literal_eval() doesn't support empty sets (GH-17742)
This commit is contained in:
parent
32f1443aa9
commit
4fcf5c12a3
4 changed files with 8 additions and 0 deletions
|
@ -194,6 +194,9 @@ and classes for traversing abstract syntax trees:
|
||||||
.. versionchanged:: 3.2
|
.. versionchanged:: 3.2
|
||||||
Now allows bytes and set literals.
|
Now allows bytes and set literals.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.9
|
||||||
|
Now supports creating empty sets with ``'set()'``.
|
||||||
|
|
||||||
|
|
||||||
.. function:: get_docstring(node, clean=True)
|
.. function:: get_docstring(node, clean=True)
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,9 @@ def literal_eval(node_or_string):
|
||||||
return list(map(_convert, node.elts))
|
return list(map(_convert, node.elts))
|
||||||
elif isinstance(node, Set):
|
elif isinstance(node, Set):
|
||||||
return set(map(_convert, node.elts))
|
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):
|
elif isinstance(node, Dict):
|
||||||
return dict(zip(map(_convert, node.keys),
|
return dict(zip(map(_convert, node.keys),
|
||||||
map(_convert, node.values)))
|
map(_convert, node.values)))
|
||||||
|
|
|
@ -891,6 +891,7 @@ Module(
|
||||||
self.assertEqual(ast.literal_eval('(True, False, None)'), (True, False, None))
|
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('{1, 2, 3}'), {1, 2, 3})
|
||||||
self.assertEqual(ast.literal_eval('b"hi"'), b"hi")
|
self.assertEqual(ast.literal_eval('b"hi"'), b"hi")
|
||||||
|
self.assertEqual(ast.literal_eval('set()'), set())
|
||||||
self.assertRaises(ValueError, ast.literal_eval, 'foo()')
|
self.assertRaises(ValueError, ast.literal_eval, 'foo()')
|
||||||
self.assertEqual(ast.literal_eval('6'), 6)
|
self.assertEqual(ast.literal_eval('6'), 6)
|
||||||
self.assertEqual(ast.literal_eval('+6'), 6)
|
self.assertEqual(ast.literal_eval('+6'), 6)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
ast.literal_eval() now supports empty sets.
|
Loading…
Add table
Add a link
Reference in a new issue