From 4b03309bf75720e571d12fcddaf194dc5d0f4fce Mon Sep 17 00:00:00 2001 From: isidentical Date: Thu, 2 Jan 2020 20:43:57 +0300 Subject: [PATCH] bpo-38870: Throw ValueError on invalid yield from usage --- Lib/ast.py | 8 ++++---- Lib/test/test_unparse.py | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Lib/ast.py b/Lib/ast.py index 62f6e075a09fdf2..ece8b139e460eeb 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -735,10 +735,10 @@ def visit_Yield(self, node): def visit_YieldFrom(self, node): with self.delimit("(", ")"): - self.write("yield from") - if node.value: - self.write(" ") - self.traverse(node.value) + self.write("yield from ") + if not node.value: + raise ValueError("Node can't be used without a value attribute.") + self.traverse(node.value) def visit_Raise(self, node): self.fill("raise") diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py index 49767dbac16d11f..e8b0d4b06f9e97b 100644 --- a/Lib/test/test_unparse.py +++ b/Lib/test/test_unparse.py @@ -278,6 +278,8 @@ def test_invalid_fstring_conversion(self): def test_invalid_set(self): self.check_invalid(ast.Set(elts=[])) + def test_invalid_yield_from(self): + self.check_invalid(ast.YieldFrom(value=None)) class DirectoryTestCase(ASTTestCase): """Test roundtrip behaviour on all files in Lib and Lib/test."""