Python 3.15 adds built-in 'sentinel' type to fix None's ambiguity problem
A talk on sentinel values, presented at PyConDE/PyData Berlin, EuroPython and the Swiss Python Summit in 2026, examines how Python's None is overused to mean missing, unset, error, or a real value, causing bugs when these meanings collide. The talk notes that PEP 661, a proposal to standardize sentinel objects, was deferred in April but accepted by the Steering Council just nine days later, and Python 3.15 now ships a built-in 'sentinel' construct that static type checkers can narrow properly.
GoKawiil's interpretation of the reporting above, not reported fact.
The rapid reversal on PEP 661 suggests the Python Steering Council saw strong enough justification to fast-track a feature it had just rejected, which could reflect growing recognition that ad-hoc sentinel patterns were causing real-world typing and reliability issues. A built-in, type-checker-friendly sentinel could reduce a common class of subtle bugs in libraries like Pydantic that need to distinguish 'not provided' from 'explicitly set to null'.
- None in Python is overloaded to mean missing, unset, error, or a legitimate value, creating ambiguity.
- PEP 661, which standardizes sentinel values, was deferred in April 2026 but accepted by the Steering Council just nine days later.
- Python 3.15 introduces a built-in 'sentinel' construct that supports proper static type narrowing, unlike older object()-based workarounds.
Source: florianwilhelm.info — Florian Wilhelm, 2026-10-29
Published there as: “Much Ado About None: Sentinel Values in Python”
Read the original report → The summary and analysis above are GoKawiil's own, written from reporting by the source above. Facts and quotes belong to the original publisher.