SyntaxWarning: 'return' in a 'finally' block (Python 3.14)

Offen Anfängerfreundlich
#758 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
70/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Ruhig
Tech-Stack
aws, python
Bereich
backend, cloud

Rechercherichtung

Beginnen Sie in datadog_lambda/wrapper.py bei _LambdaDecorator.call und untersuchen Sie den try/except/finally-Kontrollfluss, insbesondere die bei Zeile 203 gemeldete return-Anweisung. Überprüfen Sie die vier im Issue beschriebenen Ausführungspfade und fügen Sie Tests hinzu bzw. aktualisieren Sie sie, sodass der Import unter Python 3.14 keine SyntaxWarning ausgibt, während blockierende und normale Antworten weiterhin korrekt bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Expected Behavior

No warnings emitted during Lambda cold start when importing datadog_lambda.

Actual Behavior

A SyntaxWarning is emitted at module import time (cold start) on Python 3.14:

/var/task/datadog_lambda/wrapper.py:203: SyntaxWarning: 'return' in a 'finally' block
  return self.blocking_response

This warning fires every cold start and pollutes CloudWatch logs. Python 3.14 introduced SyntaxWarning for return/break/continue inside finally blocks because such a return silently suppresses any exception that was actively propagating through the try/except.

Steps to Reproduce the Problem

  1. Deploy a Lambda function using datadog-lambda on the Python 3.14 runtime
  2. Trigger a cold start (first invocation or new sandbox)
  3. Observe the SyntaxWarning in CloudWatch logs during INIT_START

Specifications

  • Datadog Lambda Library version: 8.123.0
  • Python version: 3.14

Root Cause

In _LambdaDecorator.__call__, the finally block contains a return:

finally:
    self._after(event, context)
    if self.blocking_response:
        return self.blocking_response  # ← triggers SyntaxWarning in Python 3.14

Proposed Fix

Remove return self.response from the try block and return self.blocking_response from the finally block, deferring both to after the entire try/except/finally:

    try:
        if self.blocking_response:
            return self.blocking_response
        self.response = self.func(event, context, **kwargs)
    except BlockingException:
        self.blocking_response = get_asm_blocked_response(self.event_source)
    except Exception:
        ...
        raise
    finally:
        self._after(event, context)

    if self.blocking_response:
        return self.blocking_response
    return self.response

All four execution paths (block before, block during, block after, normal) remain correct. Happy to open a PR with this fix and updated tests.

Stacktrace

/var/task/datadog_lambda/wrapper.py:203: SyntaxWarning: 'return' in a 'finally' block
return self.blocking_response
Vorherrschende Sprache
Python
Sterne
102
Forks
52
Ø Merge
5 T. 19 Std.
Gemergte PRs (30 T.)
2

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus DataDog/datadog-lambda-python

Alle Issues in DataDog/datadog-lambda-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.