diff --git a/parso/python/normalizer.py b/parso/python/normalizer.py index b7dbe35..64d6c35 100644 --- a/parso/python/normalizer.py +++ b/parso/python/normalizer.py @@ -125,9 +125,9 @@ class ErrorFinder(Normalizer): in_loop = True if not in_loop: self._add_syntax_error("'break' outside loop", leaf) - elif leaf.value == 'return': + elif leaf.value in ('yield', 'return'): if self._context.node.type != 'funcdef': - self._add_syntax_error("'return' outside function", leaf) + self._add_syntax_error("'%s' outside function" % leaf.value, leaf) elif leaf.value == 'await': if self._context.node.type != 'funcdef' \ or self._context.node.parent.type != 'async_funcdef': diff --git a/test/test_python_errors.py b/test/test_python_errors.py index b594448..510f8d5 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -71,6 +71,7 @@ def test_indentation_errors(code, positions): 'continue', 'break', 'return', + 'yield', 'try: pass\nexcept: pass\nexcept X: pass', # IndentationError @@ -95,6 +96,7 @@ def test_python_exception_matches(code): ('code', 'version'), [ # SyntaxError ('async def bla():\n def x(): await bla()', '3.5'), + ('yield from', '3.5'), ] )