Python 3.14: Pi Release Features

python dev

Python 3.14 is the “Pi release”—and the community has been making math jokes for years waiting for this. Beyond the memes, what’s actually new?

Release Timeline

Major Features

Deferred Evaluation of Annotations (PEP 649)

Finally, from __future__ import annotations behavior becomes default:

# Before: Forward references needed quotes
class Node:
    def add_child(self, child: "Node") -> "Node":
        ...

# Python 3.14: Just works
class Node:
    def add_child(self, child: Node) -> Node:
        ...

Annotations are evaluated lazily when accessed, not at function definition time.

Improved Error Messages (Continued)

Python’s error messages keep getting better:

# Before 3.14
NameError: name 'prnt' is not defined

# Python 3.14
NameError: name 'prnt' is not defined. Did you mean 'print'?
>>> prnt("hello")
      ^^^^
      hint: Did you mean 'print'?

More context, better suggestions, clearer formatting.

Faster Exceptions

Exception handling is faster (~10% improvement):

# Exceptions now lighter weight
try:
    risky_operation()
except ValueError:
    handle_error()

# Less overhead for try/except blocks

JIT Compilation (Experimental)

The experimental JIT continues to improve:

# Enable experimental JIT
python --jit script.py

Select code paths get compiled to machine code. Still experimental but showing 10-30% speedups on some workloads.

REPL Improvements

The interactive interpreter gets better:

>>> # Multi-line editing improved
>>> def hello(
...     name: str,
...     greeting: str = "Hello"
... ) -> str:
...     return f"{greeting}, {name}"
...
>>> # Better history navigation
>>> # Syntax highlighting in REPL

Typing Improvements

# TypedDict improvements
from typing import TypedDict, Required, NotRequired

class User(TypedDict):
    id: Required[int]
    name: str  # Required by default now
    email: NotRequired[str]

# Better TypeVar syntax
def first[T](items: list[T]) -> T:
    return items[0]

# ReadOnly for TypedDict
from typing import ReadOnly

class Config(TypedDict):
    host: str
    port: ReadOnly[int]  # Cannot be modified

New dbm.sqlite3 Backend

SQLite-backed DBM:

import dbm.sqlite3

with dbm.sqlite3.open('mydb.sqlite') as db:
    db['key'] = 'value'
    print(db['key'])

More reliable than traditional DBM implementations.

asyncio Improvements

import asyncio

# Better task group handling
async def main():
    async with asyncio.TaskGroup() as tg:
        # Improved exception handling
        task1 = tg.create_task(work())
        task2 = tg.create_task(more_work())
    
    # All tasks complete or exception raised

# New: cancellation scopes
async with asyncio.open_cancel_scope() as scope:
    await long_task()
    scope.cancel()  # Cancel all in scope

pathlib Additions

from pathlib import Path

# New methods
path = Path('/home/user/file.txt')
path.copy_to(Path('/backup/file.txt'))  # Native copy
path.copytree(Path('/backup/dir/'))  # Copy directory tree

# Better globbing
for match in Path('.').walk():
    print(match)

Performance

Benchmarks

Benchmark3.133.14Improvement
pyperformance1.0x1.05-1.10x5-10%
Web workloads1.0x1.08x8%
Numeric1.0x1.15x15% (with JIT)

The faster CPython initiative continues to pay off.

Memory

Slight reduction in memory usage for typical applications (~3-5%).

Deprecations and Removals

Deprecated

# asyncio.iscoroutinefunction with generator-based
# Use inspect.iscoroutinefunction instead

# Some legacy ssl options
# Update to modern TLS settings

Removed

# Nothing major removed
# Python core team being careful about breakage

Upgrade Guide

Check Compatibility

pip install pyupgrade
pyupgrade --py314-plus *.py

Test Annotations

The annotation change is the biggest potential issue:

# If you introspect annotations at import time, update:
from typing import get_type_hints

# Instead of accessing __annotations__ directly
hints = get_type_hints(MyClass)

Update CI

# GitHub Actions
- uses: actions/setup-python@v4
  with:
    python-version: '3.14'

Pi Day Celebration

The Python community celebrated:

Should You Upgrade?

Upgrade for:

Wait if:

Final Thoughts

Python 3.14 is a solid release. Lazy annotations are the biggest change—they simplify a lot of typing patterns. Performance continues to improve.

Happy Pi Day. 🥧


3.14159… reasons to upgrade.

All posts