diff --git a/mypy/semanal.py b/mypy/semanal.py index d769178dc298..10ddc16fdcae 100644 --- a/mypy/semanal.py +++ b/mypy/semanal.py @@ -6134,7 +6134,8 @@ def analyze_comp_for_2(self, expr: GeneratorExpr | DictionaryComprehension) -> N def visit_lambda_expr(self, expr: LambdaExpr) -> None: self.analyze_arg_initializers(expr) - self.analyze_function_body(expr) + with self.inside_except_star_block_set(False, entering_loop=False): + self.analyze_function_body(expr) def visit_conditional_expr(self, expr: ConditionalExpr) -> None: expr.if_expr.accept(self) diff --git a/test-data/unit/check-python311.test b/test-data/unit/check-python311.test index dfbb3d45e56f..c6d42660403e 100644 --- a/test-data/unit/check-python311.test +++ b/test-data/unit/check-python311.test @@ -260,6 +260,24 @@ def foo(): return # E: "return" not allowed in except* block [builtins fixtures/exception.pyi] +[case testLambdaInExceptStarBlock] +# flags: --python-version 3.11 +def foo(): + try: + pass + except* Exception: + x = lambda: 0 + return lambda: 0 # E: "return" not allowed in except* block + +def loop(): + while True: + try: + pass + except* Exception: + x = lambda: 0 + return lambda: 0 # E: "return" not allowed in except* block +[builtins fixtures/exception.pyi] + [case testRedefineLocalWithinExceptStarTryClauses] # flags: --allow-redefinition def fn_str(_: str) -> int: ...