bpo-39158: ast.literal_eval() doesn't support empty sets (GH-17742)
diff --git a/Lib/ast.py b/Lib/ast.py
index ece8b13..495c0d6 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -83,6 +83,9 @@
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 51a7c1a..55b91cf 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -891,6 +891,7 @@
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)